協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
建立 IngressClass 以設定 Application Load Balancer
EKS 自動模式會自動執行負載平衡的常規任務,包括將叢集應用程式公開至網際網路。
AWS 建議使用 Application Load Balancer (ALB) 來處理 HTTP 與 HTTPS 流量。Application Load Balancer 可根據請求的內容路由請求。如需 Application Load Balancer 的詳細資訊,請參閱什麼是 Elastic Load Balancing?
EKS 自動模式會建立與設定 Application Load Balancer (ALB)。例如,當您建立一個 Ingress Kubernetes 物件時,EKS 自動模式會建立一個負載平衡器,並將其設定為將流量路由至叢集工作負載。
概觀
-
建立您想要公開到網際網路的工作負載。
-
建立
IngressClassParams資源,指定 AWS 特定的組態值,例如用於 SSL/TLS 的憑證及 VPC 子網路。 -
建立
IngressClass資源,指定 EKS 自動模式將作為該資源的控制器。 -
建立
Ingress資源,將 HTTP 路徑和連接埠與叢集工作負載關聯起來。
EKS 自動模式將建立 Application Load Balancer,指向 Ingress 資源中指定的工作負載,並使用在 IngressClassParams 資源中指定的負載平衡器配置。
先決條件
-
Amazon EKS 叢集上已啟用 EKS 自動模式
-
Kubectl 已設定為連接到您的叢集
-
您可使用
kubectl apply -f <filename>,將以下範例組態 YAML 檔案套用至您的叢集。
-
注意
步驟 1:建立工作負載
首先,建立您想要公開到網際網路的工作負載。此工作負載可為任何處理 HTTP 流量的 Kubernetes 資源,例如部署或服務。
此範例使用名為 service-2048 的簡單 HTTP 服務,其接聽連接埠 80。透過套用下列資訊清單 2048-deployment-service.yaml,建立此服務及其部署:
--- apiVersion: apps/v1 kind: Deployment metadata: name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 2 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: service-2048 spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app.kubernetes.io/name: app-2048
將組態套用至您的叢集:
kubectl apply -f 2048-deployment-service.yaml
上面列出的資源將在預設命名空間中建立。您可以透過執行以下命令來進行確認:
kubectl get all -n default
步驟 2:建立 IngressClassParams
建立 IngressClassParams 物件來為 Application Load Balancer 指定 AWS 特定的組態選項。在本範例中,我們在名為 alb-ingressclassparams.yaml 的檔案中,建立名為 alb 的 IngressClassParams 資源 (您將在下一步中使用),並指定負載平衡器方案為 internet-facing。
apiVersion: eks.amazonaws.com/v1 kind: IngressClassParams metadata: name: alb spec: scheme: internet-facing
將組態套用至您的叢集:
kubectl apply -f alb-ingressclassparams.yaml
步驟 3:建立 IngressClass
在名為 alb-ingressclass.yaml 的檔案中,建立參考 IngressClassParams 資源中設定的 AWS 特定組態值的 IngressClass。請記下 IngressClass 的名稱。在此範例中,IngressClass 和 IngressClassParams 都命名為 alb。
使用 is-default-class 註釋來控制 Ingress 資源是否預設使用此類別。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb annotations: # Use this annotation to set an IngressClass as Default # If an Ingress doesn't specify a class, it will use the Default ingressclass.kubernetes.io/is-default-class: "true" spec: # Configures the IngressClass to use EKS Auto Mode controller: eks.amazonaws.com/alb parameters: apiGroup: eks.amazonaws.com kind: IngressClassParams # Use the name of the IngressClassParams set in the previous step name: alb
關於設定選項的詳細資訊,請參閱 IngressClassParams 參考。
將組態套用至您的叢集:
kubectl apply -f alb-ingressclass.yaml
步驟 4:建立傳入
在名為 alb-ingress.yaml 的檔案中建立 Ingress 資源。此資源的用途是將 Application Load Balancer 上的路徑與連接埠,與您叢集中的工作負載相關聯。在此範例中,我們建立名為 Ingress 的資源 2048-ingress,將其流量路由到連接埠 80 上名為 service-2048 的服務。
如需關於設定資源的詳細資訊,請參閱 Kubernetes 文件中的傳入
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: 2048-ingress spec: # this matches the name of IngressClass. # this can be omitted if you have a default ingressClass in cluster: the one with ingressclass.kubernetes.io/is-default-class: "true" annotation ingressClassName: alb rules: - http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: service-2048 port: number: 80
將組態套用至您的叢集:
kubectl apply -f alb-ingress.yaml
步驟 5:檢查狀態
使用 kubectl 尋找 Ingress 的狀態。負載平衡器可能需要幾分鐘才能就緒。
使用您在上一步中設定的 Ingress 資源名稱。例如:
kubectl get ingress 2048-ingress
資源就緒後,擷取負載平衡器的網域名稱。
kubectl get ingress 2048-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
要在 Web 瀏覽器中檢視服務,請檢閱 Ingress 救援中指定的連接埠與路徑。
步驟 6:清除
要清理負載平衡器,請使用以下命令:
kubectl delete ingress 2048-ingress kubectl delete ingressclass alb kubectl delete ingressclassparams alb
EKS 自動模式將自動刪除您 AWS 帳戶中的關聯負載平衡器。
IngressClassParams 參考
下表屬於常用組態選項的快速參考。
| 欄位 | 描述 | 範例值 |
|---|---|---|
|
|
定義 ALB 是內部,還是可面向網際網路 |
|
|
|
限制哪些命名空間可使用此 IngressClass |
|
|
|
將多個傳入分組,以共用單一 ALB |
|
|
|
設定 ALB 的 IP 位址類型 |
|
|
|
用於 ALB 部署的子網路 ID 清單 |
|
|
|
用於選擇 ALB 子網路的標籤篩選器 |
|
|
|
要使用的 SSL 憑證 ARN |
|
|
|
用於 AWS 資源的自訂標籤 |
|
|
|
負載平衡器特定屬性 |
|
考量事項
-
您無法使用 IngressClass 上的註釋來設定 EKS 自動模式的負載平衡器。
-
您無法使用 EKS 自動模式來設定 ListenerAttribute。
-
您必須更新叢集 IAM 角色,以啟用從 Kubernetes 到 AWS 負載平衡器資源的標籤傳播。如需詳細資訊,請參閱 用於 EKS Auto 資源的自訂 AWS 標籤。
-
有關將資源與 EKS 自動模式或自我管理的 AWS 負載平衡器控制器關聯的資訊,請參閱 移轉參考。
-
有關修復負載平衡器問題的資訊,請參閱 EKS 自動模式疑難排解。
-
有關使用 EKS 自動模式負載平衡功能的更多考量,請參閱 負載平衡。
以下表格詳細比較了 EKS 自動模式中 IngressClassParams、傳入註釋和 TargetGroupBinding 組態的變更。這些資料表突顯了 EKS 自動模式的負載平衡功能與開放原始碼負載平衡器控制器之間的主要差異,包括 API 版本變更、已棄用的功能及更新的參數名稱。
IngressClassParams
| 先前的 | 新增 | 描述 |
|---|---|---|
|
|
|
API 版本變更 |
|
|
|
支援多個憑證 ARN |
|
|
|
變更子網路相符的結構描述 |
|
|
不支援 |
EKS 自動模式尚不支援 |
傳入註釋
| 先前的 | 新增 | 描述 |
|---|---|---|
|
|
不支援 |
在傳入物件上使用 |
|
|
不支援 |
僅在 IngressClass 中指定群組 |
|
|
不支援 |
請改用 WAF v2 |
|
|
不支援 |
請改用 WAF v2 |
|
|
不支援 |
Shield 整合已停用 |
|
|
不支援 |
目前不支援 OIDC 驗證類型 |
TargetGroupBinding
| 先前的 | 新增 | 描述 |
|---|---|---|
|
|
|
API 版本變更 |
|
|
|
明確的目標類型規格 |
|
|
不支援 |
不再支援沒有安全群組的 NLB |