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

1 分的閱讀內容
0

我想要在 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 服務

AWS 官方
AWS 官方已更新 3 年前