限制可指派給服務的外部 IP 地址 - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

限制可指派給服務的外部 IP 地址

Kubernetes 服務可透過下列方式從叢集內部存取:

  • 由 自動指派的叢集 IP 地址 Kubernetes

  • 您為服務規則中的 externalIPs 屬性指定的 IP 地址。外部 IP 地址不受 管理 Kubernetes 和 是叢集管理員的責任。使用 externalIPs 指定的外部 IP 地址不同於雲端提供商指派給類型服務 LoadBalancer 的外部 IP 地址。

進一步了解 Kubernetes 服務,請參閱中的服務 Kubernetes 文件中)。您可以限制可以在服務規格中為 externalIPs 指定的 IP 地址。

  1. 部署 cert-manager 以管理網路掛鉤憑證。如需詳細資訊,請參閱 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 清單檔案。您也可以在 上檢視 Webhook 的原始程式碼 GitHub.

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
  5. 指定 CIDR 區塊。在編輯器中開啟下載的檔案,並在下列這幾行的開頭移除 \#

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

    10.0.0.0/8 以您自己的 CIDR 區塊取代 。您可以指定需要的區塊,不限數量。如果指定多個區塊,則請在區塊之間加上逗號。

  6. 如果您的叢集不在 us-west-2 AWS 區域中,請使用下列命令取代amazonaws.com檔案中的 us-west-2602401143452、 和 。在執行命令之前,請取代 region-code 以及 111122223333檢視 Amazon EKS 附加元件的 Amazon 容器映像登錄檔清單中的 AWS 區域值。

    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||' externalip-webhook.yaml
  7. 將清單檔案套用至叢集。

    kubectl apply -f externalip-webhook.yaml

    嘗試將 服務部署至叢集,其 IP 地址指定為 externalIPs ,而該 IP 地址未包含在您在指定 CIDR 區塊步驟中指定的區塊中,將會失敗。