我想要在 Amazon Elastic Kubernetes Service (Amazon EKS) 中限制 LoadBalancer 類型服務的 CIDR IP 地址。
簡短說明
如果您建立 type:LoadBalancer 服務,則系統預設會允許來自 0.0.0.0/0 來源的請求。如果您的負載平衡器位於公有子網路中,則請求可從網際網路的任何位置路由至工作節點。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請確認您使用的是最新的 AWS CLI 版本。
設定您的環境
1. 建立 Amazon EKS 叢集。
2. 建立並啟動工作節點。
3. 設定 kubectl。
4. 設定 AWS CLI。
5. 設定 AWS 負載平衡器控制器。
**注意:**AWS 負載平衡器控制器支援 LoadBalancer 類型服務的下列 AWS Network Load Balancer 版本: NLB ip 模式 (2.0.0 版或更新版本) 和 NLB 執行個體模式 (2.2.0 版或更新版本)
**重要事項:**當您為 LoadBalancer 類型服務佈建新的 Network Load Balancer 時,最佳做法是使用 AWS 負載平衡器控制器。使用 AWS 負載平衡器控制器而非 Kubernetes 樹狀服務負載平衡器控制器。
限制 CIDR IP 地址
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. 如要套用清單檔案,請執行下列命令:
$ kubectl apply -f svc.yaml
3. 如要確認安全群組的輸入規則已修改,請執行下列 AWS CLI 命令:
$ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
...
"CidrIp": "143.231.0.0/16"
...
最後,請考慮以下事項:
如果您使用 NLB ip 模式,則系統會預設忽略 .spec.loadBalancerSourceRanges 欄位。在這種情況下,請使用下列註釋:
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true
此註釋可啟用用戶端 IP 保留。
如服務為 Network Load Balancer 類型,請考慮將安全群組限制最大化。針對每個節點連接埠和子網路 CIDR 範圍,控制器會在工作節點的安全群組建立規則。
相關資訊
叢集身分驗證
Kubernetes 服務