Azure Kubernetes 服务 (AKS) 中的 HTTP 代理支持

本文介绍如何将 Azure Kubernetes 服务 (AKS) 群集配置为使用 HTTP 代理进行出站 Internet 访问。

部署到托管或自定义虚拟网络中的 AKS 群集具有某些出站依赖项,正常运行需要这些依赖项,这在需要通过 HTTP 代理路由 Internet 访问的环境中造成了问题。 节点无法启动访问 Internet 服务所需的配置、环境变量和证书。

HTTP 代理功能为 AKS 群集添加了 HTTP 代理支持,公开了一个简单的接口,可以使用该接口来保护依赖代理的环境中需要 AKS 的网络流量。 借助此功能,AKS 节点和 Pod 都配置为使用 HTTP 代理。 此功能还支持在启动群集的过程中,在节点上安装受信任的证书颁发机构。 更多复杂的解决方案可能需要创建信任链来建立跨网络的安全通信。

限制和注意事项

支持以下方案:

  • 每个节点池使用不同的代理配置
  • 用户/密码身份验证
  • 用于 API 服务器通信的自定义证书颁发机构 (CA)
  • 具有 Windows 节点池的 AKS 群集
  • 使用虚拟机可用性集 (VMAS) 的节点池
  • 使用 * 作为通配符,附加到 noProxy 的域后缀

httpProxyhttpsProxytrustedCa 默认没有值。 Pod 注入到以下环境变量:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • NO_PROXY
  • no_proxy

若要禁用代理环境变量的注入,需要用 "kubernetes.azure.com/no-http-proxy-vars":"true" 注释 Pod。

开始之前

可以在群集创建期间使用 az aks create 命令通过 HTTP 代理配置 AKS 群集,并将配置作为 JSON 文件传入。

  1. 创建文件并提供 httpProxyhttpsProxynoProxy 的值。 如果环境需要,请提供 trustedCa 的值。

配置文件的架构如下所示:

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}

查看每个参数的要求:

  • httpProxy:用于在群集外部创建 HTTP 连接的代理 URL。 URL 方案必须为 http
  • httpsProxy:用于在群集外部创建 HTTPS 连接的代理 URL。 如果未指定,则 httpProxy 会同时用于 HTTP 和 HTTPS 连接。
  • noProxy:目标域名、域、IP 地址或其他网络 CIDR 的列表,用于排除代理。
  • trustedCa:包含 base64 encoded 备用 CA 证书内容的字符串。 目前仅支持 PEM 格式。

重要

为了与属于 Kubernetes 系统的基于 Go 的组件兼容,该证书必须支持 而非已弃用的公用名证书。

应用程序在如何符合环境变量 http_proxyhttps_proxyno_proxy 方面存在差异。 Curl 和 Python 不支持 no_proxy 中的 CIDR,而 Ruby 支持。

输入示例:

{
  "httpProxy": "http://myproxy.server.com:8080/", 
  "httpsProxy": "https://myproxy.server.com:8080/", 
  "noProxy": [
    "localhost",
    "127.0.0.1"
  ],
  "trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...b3Rpbk15RGszaWFyCkYxMFlscWNPbWVYMXVGbUtiZGkvWG9yR2xrQ29NRjNURHg4cm1wOURCaUIvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
}
  1. 在将 az aks create 参数设为你创建的文件的情况下,使用 --http-proxy-config 命令部署群集。
az aks create \
    --name $clusterName \
    --resource-group $resourceGroup \
    --http-proxy-config aks-proxy-config.json \
    --generate-ssh-keys

你的群集应使用节点上配置的 HTTP 代理进行初始化。

更新群集以启用或更新 http 代理配置

备注

如果切换到新代理,则新代理必须已存在才能更新成功。 升级完成后,可以删除旧代理。

可以使用命令在现有群集 az aks update 上启用或更新 HTTP 代理配置。 --http-proxy-config参数应设置为一个新的 JSON 文件,其中包含更新的httpProxyhttpsProxynoProxy值,必要时更新trustedCa。 此更新使用新的 httpProxyhttpsProxynoProxy 值将新的环境变量注入 Pod。

注意

当您使用 az aks update 命令更新群集的代理配置时,AKS 将自动重新映像集群中所有的节点池。 可以使用 Pod 中断预算 (PDB) 在重置映像期间保护关键 Pod 免受中断影响。

例如,假设你创建了一个新文件,其中包含名为 aks-proxy-config-2.json 的新 CA 证书的 base64 编码字符串。 可以使用以下命令更新群集上的代理配置:

az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json

监视加载项配置

结合使用 HTTP 代理与监视加载项时,支持以下配置:

  • 无身份验证的出站代理
  • 具有用户名和密码身份验证的出站代理
  • 具有 Log Analytics 终结点的受信任证书的出站代理

不支持下列配置:

  • 将代理与受信任的证书配合使用时的自定义指标和建议警报功能

后续步骤

有关 AKS 群集的网络要求的详细信息,请参阅控制 AKS 中群集节点的出口流量