我想要在 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 版本。
設定您的環境
若要設定您的環境,請完成下列步驟:
- 建立 Amazon EKS 叢集。
- 建立,然後啟動工作節點。
- 設定 kubectl。
- 設定 AWS CLI。
- 設定 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 欄位
-
在您的 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"
-
執行以下命令以套用您的 svc.yaml 檔案:
$ kubectl apply -f svc.yaml
請執行下列命令,以檢查 AWS 負載平衡器控制器 Pod 日誌:
$ kubectl logs -f <aws load balancer controller pod> -n <namespace>
-
AWS 負載平衡器控制器會在安全群組的傳入規則中新增設定的負載平衡器來源範圍。請執行下列命令,以確認安全群組的傳入規則已修改:
$ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
...
"CidrIp": "143.231.0.0/16"
...
-
如果您使用 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 個。
相關資訊
允許使用者存取您的叢集