GSP178
概览
在 Kubernetes Engine 中,专用集群是指确保无法从公共网络访问主实例的集群。在专用集群中,节点没有公共 IP 地址,只有专用地址,因此工作负载在隔离的环境中运行。节点和主实例使用 VPC 对等互连相互通信。
在 Kubernetes Engine API 中,地址范围以无类别域间路由 (CIDR) 区块表示。
在本实验中,您将学习如何创建 Kubernetes 专用集群。
您将执行的操作
前提条件
学员应已具备创建和启动 Kubernetes 集群的经验,并全面掌握 CIDR 范围格式的 IP 寻址。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验 后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意 :请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意 :请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
点击开始实验 按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
“打开 Google Cloud 控制台”按钮
剩余时间
进行该实验时必须使用的临时凭据
帮助您逐步完成本实验所需的其他信息(如果需要)
点击打开 Google Cloud 控制台 (如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接 )。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示 :将这些标签页安排在不同的窗口中,并排显示。
注意 :如果您看见选择账号 对话框,请点击使用其他账号 。
如有必要,请复制下方的用户名 ,然后将其粘贴到登录 对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
点击下一步 。
复制下面的密码 ,然后将其粘贴到欢迎 对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
点击下一步 。
重要提示: 您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意 :在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
继续在后续页面中点击以完成相应操作:
接受条款及条件。
由于这是临时账号,请勿添加账号恢复选项或双重验证。
请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意: 如需访问 Google Cloud 产品和服务,请点击导航菜单 ,或在搜索 字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
点击 Google Cloud 控制台顶部的激活 Cloud Shell 。
在弹出的窗口中执行以下操作:
继续完成 Cloud Shell 信息窗口中的设置。
授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID :
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
(可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
点击授权 。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
(可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意: 如需查看在 Google Cloud 中使用 gcloud
的完整文档,请参阅 gcloud CLI 概览指南 。
任务 1. 设置区域和可用区
设置本实验的项目区域:
gcloud config set compute/zone {{{project_0.default_zone | "Zone"}}}
为区域创建一个变量:
export REGION={{{project_0.default_region | REGION}}}
为可用区创建一个变量:
export ZONE={{{project_0.default_zone | Zone}}}
参阅“区域和可用区”文档 了解详情。
注意 :当您在自己的机器上运行 gcloud
时,不同会话的配置设置保持不变。但在 Cloud Shell 中,您需要为每个新会话或在每次重新连接时设置配置。
任务 2. 创建专用集群
创建专用集群时,您必须指定运行 Kubernetes 主实例组件的虚拟机的 /28
CIDR 范围,并且需要启用 IP 别名。
接下来,您将创建一个名为 private-cluster
的集群,并为主实例指定 CIDR 范围 172.16.0.16/28
。启用 IP 别名时,让 Kubernetes Engine 自动为您创建一个子网。
您将使用 --private-cluster
、--master-ipv4-cidr
和 --enable-ip-alias
标志来创建专用集群。
运行以下命令以创建集群:
gcloud beta container clusters create private-cluster \
--enable-private-nodes \
--master-ipv4-cidr 172.16.0.16/28 \
--enable-ip-alias \
--create-subnetwork ""
验证您已完成的任务
点击检查我的进度 可验证您已完成的任务。如果您已成功创建专用集群,就会看到一个评估分数。
创建专用集群
任务 3. 查看子网和次要地址范围
列出默认网络中的子网:
gcloud compute networks subnets list --network default
在输出中,找到为您的集群自动创建的子网的名称。例如 gke-private-cluster-subnet-xxxxxxxx
。请保存该集群的名称,以备在后续步骤中使用。
现在,运行以下命令获取自动创建的子网的信息(将 [SUBNET_NAME]
替换为您的子网):
gcloud compute networks subnets describe [SUBNET_NAME] --region=$REGION
输出中会显示带 GKE 专用集群名称的主地址范围以及次要地址范围:
...
ipCidrRange: 10.0.0.0/22
kind: compute#subnetwork
name: gke-private-cluster-subnet-163e3c97
...
privateIpGoogleAccess: true
...
secondaryIpRanges:
- ipCidrRange: 10.40.0.0/14
rangeName: gke-private-cluster-pods-163e3c97
- ipCidrRange: 10.0.16.0/20
rangeName: gke-private-cluster-services-163e3c97
...
在输出中,您可以看到一个次要范围用于 Pod ,另一个次要范围用于服务 。
请注意,privateIPGoogleAccess
设置为 true
。这让您的集群主机(只有专用 IP 地址)能够与 Google API 和服务通信。
任务 4. 启用主授权网络
此时,唯一能访问主实例的 IP 地址是在以下范围内的地址:
您的子网的主要范围,这是用于节点的范围。
您的子网的次要范围,这是用于 Pod 的范围。
要提供对主实例的其他访问权限,您必须为所选地址范围授权。
创建虚拟机实例
创建一个源实例,用于检查与 Kubernetes 集群的连接情况:
gcloud compute instances create source-instance --zone=$ZONE --scopes 'https://www.googleapis.com/auth/cloud-platform'
验证您已完成的任务
点击检查我的进度 可验证您已完成的任务。如果您已成功创建虚拟机实例,就会看到一个评估分数。
创建虚拟机实例
使用以下命令来获取 source-instance
的 <External_IP>
:
gcloud compute instances describe source-instance --zone=$ZONE | grep natIP
输出示例:
natIP: 35.192.107.237
复制 <nat_IP>
地址并保存,以在后续步骤中使用。
运行以下命令来为外部地址范围授权,请将 [MY_EXTERNAL_RANGE]
替换为上一个输出中的外部地址 CIDR 范围(您的 CIDR 范围是 natIP/32
)。通过将 CIDR 范围指定为 natIP/32
,我们将一个特定的 IP 地址加入许可名单:
gcloud container clusters update private-cluster \
--enable-master-authorized-networks \
--master-authorized-networks [MY_EXTERNAL_RANGE]
注意:
在生产环境下,请将 [MY_EXTERNAL_RANGE]
替换为您的网络外部地址 CIDR 范围。
验证您已完成的任务
点击检查我的进度 可验证您已完成的任务。如果您已成功为外部地址范围授权,就会看到一个评估分数。
为外部地址范围授权
现在您可以从一系列外部地址访问主实例了,接下来您将安装 kubectl
,以便使用它来获取有关您集群的信息。例如,您可以使用 kubectl
来验证您的节点没有外部 IP 地址。
使用以下命令,通过 SSH 连接到 source-instance
:
gcloud compute ssh source-instance --zone=$ZONE
按 Y
继续。对于所有口令问题,均按 Enter 键回复。
在 SSH shell 中,安装 Cloud SDK 的 kubectl
组件:
sudo apt-get install kubectl
使用以下命令,从 SSH shell 中配置对 Kubernetes 集群的访问权限:
sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
gcloud container clusters get-credentials private-cluster --zone=$ZONE
注意: 请确保已在 ZONE
变量中导出指定的可用区。
验证您的集群节点没有外部 IP 地址:
kubectl get nodes --output yaml | grep -A4 addresses
输出中显示节点具有内部 IP 地址,但没有外部地址:
...
addresses:
- address: 10.0.0.4
type: InternalIP
- address: ""
type: ExternalIP
...
下面是另一个可用于验证节点没有外部 IP 地址的命令:
kubectl get nodes --output wide
输出中显示 EXTERNAL-IP
列为空:
STATUS ... VERSION EXTERNAL-IP OS-IMAGE ...
Ready v1.8.7-gke.1 Container-Optimized OS from Google
Ready v1.8.7-gke.1 Container-Optimized OS from Google
Ready v1.8.7-gke.1 Container-Optimized OS from Google
输入以下命令关闭 SSH shell:
exit
任务 5. 清理
删除 Kubernetes 集群:
gcloud container clusters delete private-cluster --zone=$ZONE
按 Y
继续。
验证您已完成的任务
点击检查我的进度 可验证您已完成的任务。如果您已成功删除 Kubernetes 集群,就会看到一个评估分数。
删除 Kubernetes 集群
任务 6. 创建一个使用自定义子网的专用集群
在上一部分,Kubernetes Engine 自动为您创建了一个子网。在此部分,您将创建自己的自定义子网,然后创建一个专用集群。
您的子网有一个主地址范围和两个次要地址范围。
创建子网和次要地址范围:
gcloud compute networks subnets create my-subnet \
--network default \
--range 10.0.4.0/22 \
--enable-private-ip-google-access \
--region=$REGION \
--secondary-range my-svc-range=10.0.32.0/20,my-pod-range=10.4.0.0/14
验证您已完成的任务
点击检查我的进度 可验证您已完成的任务。如果您已在 区域中成功创建子网和次要地址范围,就会看到一个评估分数。
在 区域中创建子网和次要地址范围
创建一个使用您的子网的专用集群:
gcloud beta container clusters create private-cluster2 \
--enable-private-nodes \
--enable-ip-alias \
--master-ipv4-cidr 172.16.0.32/28 \
--subnetwork my-subnet \
--services-secondary-range-name my-svc-range \
--cluster-secondary-range-name my-pod-range \
--zone=$ZONE
验证您已完成的任务
点击检查我的进度 可验证您已完成的任务。如果您已成功创建一个使用您的子网的专用集群,就会看到一个评估分数。
创建一个使用您的子网的专用集群
检索源实例的外部地址范围:
gcloud compute instances describe source-instance --zone=$ZONE | grep natIP
输出示例:
natIP: 35.222.210.67
复制 <nat_IP>
地址并保存,以在后续步骤中使用。
运行以下命令来为外部地址范围授权,请将 [MY_EXTERNAL_RANGE]
替换为上一个输出中的外部地址 CIDR 范围(您的 CIDR 范围是 natIP/32
)。通过将 CIDR 范围指定为 natIP/32
,我们将一个特定的 IP 地址加入许可名单:
gcloud container clusters update private-cluster2 \
--enable-master-authorized-networks \
--zone=$ZONE \
--master-authorized-networks [MY_EXTERNAL_RANGE]
验证您已完成的任务
点击检查我的进度 可验证您已完成的任务。如果您已成功为外部地址范围授予访问自定义子网中某个专用集群的权限,就会看到一个评估分数。
为外部地址范围授予访问自定义子网中的专用集群的权限
使用以下命令,通过 SSH 连接到 source-instance
:
gcloud compute ssh source-instance --zone=$ZONE
使用以下命令,从 SSH shell 中配置对 Kubernetes 集群的访问权限:
gcloud container clusters get-credentials private-cluster2 --zone=$ZONE
注意: 请确保已在 ZONE
变量中导出指定的可用区。
验证您的集群节点没有外部 IP 地址:
kubectl get nodes --output yaml | grep -A4 addresses
输出中显示节点具有内部 IP 地址,但没有外部地址:
...
addresses:
- address: 10.0.4.3
type: InternalIP
...
此时,唯一能访问主实例的 IP 地址是在以下范围内的地址:
您的子网的主要范围,这是用于节点的范围。在本例中,节点范围是 10.0.4.0/22
。
您的子网的次要范围,这是用于 Pod 的范围。在本例中,Pod 的范围是 10.4.0.0/14
。
恭喜!
您学习了如何创建 Kubernetes 专用集群。
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程 会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证 可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 4 月 15 日
上次测试实验的时间:2023 年 9 月 20 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。