限制可分配给服务的外部 IP 地址 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

限制可分配给服务的外部 IP 地址

可以通过以下方式从集群内部访问 Kubernetes 服务:

  • Kubernetes 自动分配的集群 IP 地址

  • 您在服务规格中为 externalIPs 属性指定的任何 IP 地址。外部 IP 地址不由 Kubernetes 管理,而是由集群管理员负责。使用 externalIPs 指定的外部 IP 地址不同于由云提供商分配给 LoadBalancer 类型服务的外部 IP 地址。

要了解有关 Kubernetes 服务的更多信息,请参阅 Kubernetes 文档中的服务。您能够限制可在服务规格中为 externalIPs 指定的 IP 地址。

限制在服务规格中可为 externalIPs 指定的 IP 地址

  1. 部署 cert-manager 来管理 Webhook 证书。有关更多信息,请参阅 cert-manager 文档。

    kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
  2. 验证 cert-manager pods 是否正在运行。

    kubectl get pods -n cert-manager

    输出示例如下。

    NAME READY STATUS RESTARTS AGE cert-manager-58c8844bb8-nlx7q 1/1 Running 0 15s cert-manager-cainjector-745768f6ff-696h5 1/1 Running 0 15s cert-manager-webhook-67cc76975b-4v4nk 1/1 Running 0 14s
  3. 检查您的现有服务,以确保为它们分配的外部 IP 地址都包含在您要将地址限制到的 CIDR 块之中。

    kubectl get services -A

    输出示例如下。

    NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cert-manager cert-manager ClusterIP 10.100.102.137 <none> 9402/TCP 20m cert-manager cert-manager-webhook ClusterIP 10.100.6.136 <none> 443/TCP 20m default kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 2d1h externalip-validation-system externalip-validation-webhook-service ClusterIP 10.100.234.179 <none> 443/TCP 16s kube-system kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 2d1h my-namespace my-service ClusterIP 10.100.128.10 192.168.1.1 80/TCP 149m

    如果其中有任何一个 IP 地址值不在要将访问限制到的块之内,则需要将这些地址更改为块的范围内,然后重新部署服务。例如,上面输出中的 my-service 服务获得分配的一个外部 IP 地址不在步骤 5 中 CIDR 块示例范围内。

  4. 下载外部 IP Webhook 清单。您还可以在 GitHub 上查看 Webhook 的源代码

  5. 指定 CIDR 块。在编辑器中打开下载的文件并删除下面代码行开头的 #

    #args: #- --allowed-external-ip-cidrs=10.0.0.0/8

    10.0.0.0/8 替换为您自己的 CIDR 块。您可以根据需要指定任意数量的块。如果指定多个块,请在块之间添加逗号。

  6. 则将文件中的 us-west-2602401143452amazonaws.com 替换为以下命令。在运行命令之前,为 Amazon Web Services 区域 将 region-code111122223333 替换为来自 Amazon 容器镜像注册表 列表中的值。

    sed -i.bak -e 's|602401143452|111122223333|' externalip-webhook.yaml sed -i.bak -e 's|us-west-2|region-code|' externalip-webhook.yaml sed -i.bak -e 's|amazonaws.com|amazonaws.com.cn|' externalip-webhook.yaml
  7. 将清单应用于集群。

    kubectl apply -f externalip-webhook.yaml

    若尝试将服务部署到为 externalIPs 指定的 IP 地址不在指定 CIDR 块步骤中指定的地址块范围内的集群,则部署将会失败。