本主题介绍如何通过 HTTP/HTTPS 代理路由来自 GKE on AWS 管理服务和 Connect 的流量。
GKE on AWS 需要互联网访问权限,原因如下:
- 管理服务向 Connect 注册用户集群。
- 用户集群运行 Connect Agent。
- 所有管理服务集群和用户集群节点从 Container Registry 下载映像。
您可以通过 HTTP 或 HTTPS 代理来路由这些流量。从 GKE on AWS 1.8 开始,您可以为管理服务和每个集群配置单独的代理设置。如需详细了解如何更改代理设置,请参阅更改集群代理设置。
您可以在 anthos-gke.yaml
引用的 JSON 文件中声明代理设置。
前提条件
在配置 GKE on AWS 以使用代理之前,您必须先启用 AWS VPC 端点、为代理定义安全群组,并允许与某些 Google Cloud 服务建立出站连接。
如需使用 HTTP 代理,您的用户集群必须运行 Kubernetes 1.17 或更高版本。
启用 VPC 端点
在配置代理之前,您必须为 GKE on AWS 安装创建 VPC 端点。通过 VPC 端点,专用子网中的资源无需公共互联网访问权限即可访问 AWS 服务。
下表列出了 GKE on AWS 需要 VPC 端点的 AWS 服务,以及需要有权访问端点的每个 GKE on AWS 组件的端点类型安全群组。
服务 | 端点类型 | 安全组 |
---|---|---|
自动扩缩 | 界面 | 管理、控制层面、节点池 |
EC2 | 界面 | 管理、控制层面、节点池 |
负载均衡 | 界面 | 管理、控制层面、节点池 |
密钥管理服务 | 界面 | 管理、控制层面、节点池 |
S3 | 网关 | 管理、控制层面、节点池 |
Security Token Service (STS) | 界面 | 管理、控制层面、节点池 |
您可以从 AWS VPC 控制台创建端点。您在创建 VPC 端点时设置的选项取决于您的 VPC 配置。
定义安全群组
GKE on AWS 组件必须能够连接到代理服务器。创建或查找允许与代理服务器建立出站连接的 AWS 安全群组。该安全群组应允许从管理、控制层面和节点池安全群组到代理地址和端口的出站访问。保存此安全群组的 ID(例如 sg-12345678
)。
类型 | 协议 | 出发地端口 | 目的地端口 | 地址 |
---|---|---|---|---|
出站 | TCP | 代理端口 | 代理端口 | 代理安全群组 |
允许与 Google Cloud 服务建立出站连接
要使 GKE on AWS 连接到 Google Cloud 服务,代理服务器必须允许流量到达以下网域:
gkeconnect.googleapis.com
gkehub.googleapis.com
oauth2.googleapis.com
storage.googleapis.com
www.googleapis.com
gcr.io
k8s.gcr.io
EC2-REGION.ec2.archive.ubuntu.com
将 EC2-REGION 替换为在其中运行 GKE on AWS 安装的 AWS EC2 区域。例如 us-west-1.ec2.archive.ubuntu.com/
。
如果您是将 Cloud Service Mesh 与 Prometheus 和 Kiali 搭配使用,请允许从以下网域进行出站访问:
docker.io
quay.io
创建代理配置 JSON 文件
代理配置 JSON 文件包含一个对象,其中包含三个键值对,键名为 httpProxy
、httpsProxy
和 noProxy
。在将用户名和密码应用到服务器之前,系统会使用您的 AWS KMS 密钥对用户名和密码进行加密。
{
"httpProxy": "HTTP_PROXY",
"httpsProxy": "HTTPS_PROXY",
"noProxy": "NO_PROXY"
}
请替换以下内容:
- 将 HTTP_PROXY 替换为代理服务器地址,以通过其路由 HTTP 请求。
- 将 HTTPS_PROXY 替换为通过其路由 HTTPS 请求的代理服务器。
- 将 NO_PROXY 替换为包含不使用代理的可选 CIDR 范围和网域的列表。
如需了解详情,请参阅配置参考文档。
例如,以下配置使用 10.0.0.254
上的代理并排除了一系列网站。
{
"httpProxy": "http://user:password@10.0.0.254:80",
"httpsProxy": "http://user:password@10.0.0.254:443",
"noProxy": "localhost,127.0.0.1,169.254.169.254,10.0.0.0/16,example.com"
}
将代理添加到 anthos-gke.yaml
通过执行以下步骤来配置 AWSManagementService:
切换到您的 GKE on AWS 配置所在的目录。 您在安装管理服务时创建了此目录。
cd anthos-aws
在文本编辑器中打开
anthos-gke.yaml
。添加spec.proxy
的值,如下例所示。apiVersion: multicloud.cluster.gke.io/v1 kind: AWSManagementService metadata: name: management spec: version: aws-1.14.1-gke.0 proxy: PROXY_JSON_FILE securityGroupIDs: - SECURITY_GROUP_ID ...
请替换以下内容:
- 将 PROXY_JSON_FILE 替换为代理的 JSON 配置的相对路径。
- 将 SECURITY_GROUP_ID 替换为具有代理服务器访问权限的安全群组的 ID。
保存文件。
运行
anthos-gke aws management init
以生成具有其他配置的anthos-gke.status.yaml
文件。init
命令还会验证anthos-gke.yaml
文件中的AWSManagementService
对象。anthos-gke aws management init
运行
anthos-gke aws management apply
以更新 AWS 上的管理服务。anthos-gke aws management apply
接下来,创建用户集群。将代理的安全组分别添加到
AWSCluster
和AWSNodePool
的spec.controlPlane.securityGroupIDs
和spec.securityGroupIDs
中。这样集群即有权访问代理。
配置参考文档
字段 | 说明 | 示例 | 必填 |
---|---|---|---|
httpProxy |
代理服务器网址。该值应包含主机名/IP 地址,并可根据需要选择包含端口、用户名和密码。 | "http://user:password@10.184.37.42:80" |
是 |
httpsProxy |
经过加密的 HTTPS 流量的代理网址。如果未提供 httpsProxy ,系统将使用 httpProxy 网址。 |
"http://user:password@10.101.16.31:80" |
否 |
noProxy |
要从代理中排除的网址的逗号分隔列表。每个值可以是 IP 地址、CIDR 范围、域名或星号 (* )。如果指定的网域具有前导句点(如“.google.com”),则表示需要子网域。单个星号 * 表示无需代理。 |
"1.2.3.4,10.0.0.0/16,example.com,.site.com" |
否 |
后续步骤
如需详细了解如何完成 GKE on AWS 安装,请参阅以下内容:
如需了解如何更改集群的代理设置,请参阅: