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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

限制可分配给 服务的外部 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.1.0/cert-manager.yaml
  2. 验证 cert-manager Pod 是否正在运行。

    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. 查看您的现有服务,以确保它们没有分配给您要将地址限制到的 CIDR 块中不包含的外部 IP 地址。

    kubectl get services --all-namespaces

    输出

    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 清单。您还可以在 上查看 webhook 的源代码GitHub。

    • 除 北京和宁夏 中国区域之外的所有区域

      curl -o externalip-webhook.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
    • 北京和宁夏 中国区域

      curl -o externalip-webhook.yaml https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/docs/externalip-webhook.yaml
  5. 在编辑器中打开下载的文件,并删除以下行开头的 #

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

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

  6. 如有必要,请将以下地址更改为下表中的其他地址,具体取决于集群所在的区域,然后保存文件。

    image: 602401143452.dkr.ecr.us-west-2.amazonaws.com/externalip-webhook:v1.0.0
    区域 地址
    ZHY 和 BJS
    961992271922.dkr.ecr.cn-northwest-1.amazonaws.com.cn/externalip-webhook:v1.0.0
    HKG
    800184023465.dkr.ecr.ap-east-1.amazonaws.com/externalip-webhook:v1.0.0
    BAH
    558608220178.dkr.ecr.me-south-1.amazonaws.com/externalip-webhook:v1.0.0
    CPT
    877085696533.dkr.ecr.af-south-1.amazonaws.com/externalip-webhook:v1.0.0
    MXP
    590381155156.dkr.ecr.eu-south-1.amazonaws.com/externalip-webhook:v1.0.0
  7. 将清单应用于集群。

    kubectl apply -f externalip-webhook.yaml

    如果尝试使用为 externalIPs 指定的 IP 地址(未包含在您在步骤 5 中指定的块中)将服务部署到集群,将会失败。