使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

如何在 Amazon EKS 中限制 LoadBalancer 類型服務的 CIDR IP 地址?

2 分的閱讀內容
0

我想要在 Amazon Elastic Kubernetes Service (Amazon EKS) 中限制 LoadBalancer 類型服務的 CIDR IP 地址。

簡短說明

如果您建立 LoadBalancer 類型服務,則系統預設會允許來自 0.0.0.0/0 來源的請求。如果您的負載平衡器位於公有子網路中,則請求可從網際網路的任何位置路由至工作節點。

若要限制來源而非 0.0.0.0/0,請使用 loadBalancerSourceRanges

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

設定您的環境

若要設定您的環境,請完成下列步驟:

  1. 建立 Amazon EKS 叢集
  2. 建立,然後啟動工作節點。
  3. 設定 kubectl
  4. 設定 AWS CLI
  5. 設定 AWS 負載平衡器控制器
    注意: 對於 LoadBalancer 類型服務,AWS Load Balancer Controller 支援 Network Load Balancer (NLB) IP 模式 2.0.0 版或更新版本和 NLB 執行個體模式2.2.0 或更新版本。

重要: 若要配置 LoadBalancer 服務類型的新 Network Load Balancer,最佳實務為使用 AWS Load Balancer Controller,而非使用 Kubernetes Service 負載平衡器控制器。如果是最新版本的 AWS Balancer Controller,請參閱 GitHub 網站上的 aws-load-balancer-controller

限制 CIDR IP 地址

請選擇下列其中一種方法來指定 loadBalancerSourceRanges

使用註解 

在您的服務資訊檔案 (svc.yaml) 中使用註解。

註解範例:

service.beta.kubernetes.io/load-balancer-source-ranges: 143.231.0.0/16

如需詳細資訊,請參閱 Kubernetes 網站上的存取控制

新增 loadBalancerSourceRanges 欄位

  1. 在您的 svc.yaml 檔案中,新增 .spec.loadBalancerSourceRanges 欄位:

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: "external"
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
        service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerSourceRanges:
      - "143.231.0.0/16"
  2. 執行以下命令以套用您的 svc.yaml 檔案:

    $ kubectl apply -f svc.yaml

    請執行下列命令,以檢查 AWS 負載平衡器控制器 Pod 日誌:

    $ kubectl logs -f <aws load balancer controller pod> -n <namespace>
  3. AWS 負載平衡器控制器會在安全群組的傳入規則中新增設定的負載平衡器來源範圍。請執行下列命令,以確認安全群組的傳入規則已修改:

    $ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
    ...
        "CidrIp": "143.231.0.0/16"
    ...
  4. 如果您使用 IP 模式中的 Network Load Balancer,則系統會預設忽略 .spec.loadBalancerSourceRanges 欄位。在此情況下,請使用下列註解開啟用戶端 IP 保留

    service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true

    如服務為 Network Load Balancer 類型,您可能會想要增加安全群組上限。針對每個節點連接埠和子網路 CIDR 範圍,控制器會在工作節點的安全群組建立規則。如需詳細資訊,請參閱 Kubernetes 網站上的輸入流量

    注意: 如服務為 Network Load Balancer 類型,您可能會想要增加安全群組上限。針對每個節點連接埠和子網路 CIDR 範圍,控制器會在工作節點的安全群組建立規則。例如,您在三個可用區域中有工作節點。您新增 loadBalancerSourceRange。三個運作狀態檢查規則 (每個子網路一個) 和一個 loadBalancerSourceRange 規則會在工作節點安全群組中建立。安全群組的預設限制為 60 個規則。您可以增加此配額,但每個網路介面的安全群組總數不能超過 1,000 個。

相關資訊

允許使用者存取您的叢集

AWS 官方
AWS 官方已更新 10 個月前