協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合每個人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Application Load Balancer 路由應用程式和HTTP流量
注意
新功能:Amazon EKS Auto Mode 會自動執行負載平衡的例行任務。如需詳細資訊,請參閱:
當您建立 Kubernetes ingress
,會佈建 an AWS Application Load Balancer (ALB),以平衡應用程式流量。若要進一步了解,請參閱 中的 Application Load Balancer 使用者指南和輸入中的什麼是 Application Load Balancer? https://kubernetes.io/docs/concepts/services-networking/ingress/
應用程式流量在 OSI模型L7
中平衡。若要在 載入平衡網路流量L4
,您可以部署 Kubernetes service
的 LoadBalancer
類型。此類型佈建 AWS Network Load Balancer。如需詳細資訊,請參閱使用 Network Load Balancer 的路由TCP和UDP流量。若要進一步了解兩種負載平衡類型之間的差異,請參閱 AWS 網站上的 Elastic Load Balancing 功能
必要條件
在將應用程式流量負載平衡到應用程式之前,您必須符合以下要求。
-
擁有現有的叢集。如果您沒有現有的叢集,請參閱 開始使用 Amazon EKS。如果您需要更新現有叢集的版本,請參閱 將現有叢集更新為新的 Kubernetes 版本。
-
擁有 AWS Load Balancer Controller 已部署在您的叢集上。如需詳細資訊,請參閱使用 AWS Load Balancer控制器路由網際網路流量。我們建議使用
2.7.2
版或更新版本。 -
至少兩個子網路位於不同的可用區域。所以此 AWS Load Balancer Controller 從每個可用區域選擇一個子網路。當在可用區域中找到多個標記的子網路時,控制器會根據其子網路 ID 依詞典編纂順序來選擇子網路。每個子網路必須至少有 8 個可用的 IP 地址。
如果您使用的是連接到工作者節點的多個安全群組,則必須僅標記一個安全群組,如下所示。使用您的叢集名稱取代
my-cluster
。-
索引鍵:
kubernetes.io/cluster/<my-cluster>
-
值:
shared
或owned
-
-
如果您使用的是 AWS Load Balancer Controller 版本
2.1.1
或更早版本時,子網路必須以下列格式進行標記。如果您使用的是版本2.1.2
或更新版本,則標記是選用的。不過,如果出現下列任何情況,我們建議您標記子網路。您有多個叢集正在相同的 中執行VPC,或有多個 AWS 服務在 中共用子網路VPC。或者,您希望更好地控制為每個叢集佈建負載平衡器的位置。使用您的叢集名稱取代my-cluster
。-
索引鍵:
kubernetes.io/cluster/<my-cluster>
-
值:
shared
或owned
-
-
您的公有和私有子網路必須符合下列要求,除非您明確指定子網路IDs做為服務或輸入物件的註釋。假設您透過明確指定子網路IDs做為服務或輸入物件的註釋來佈建負載平衡器。在這種情況下,Kubernetes 和 AWS 負載平衡器控制器會直接使用這些子網路來建立負載平衡器,而不需要下列標籤。
-
私有子網路:必須使用下列格式進行標記。這樣一來 Kubernetes 和 AWS 負載平衡器控制器知道子網路可用於內部負載平衡器。如果您在 2020 年 3 月 26 日VPC之後使用
eksctl
或 Amazon EKS AWS CloudFormation 範本來建立 ,子網路會在建立時適當標記。如需 Amazon EKS AWS CloudFormation VPC 範本的詳細資訊,請參閱 VPC 為您的 Amazon EKS叢集建立 Amazon。-
索引鍵:
kubernetes.io/role/internal-elb
-
值:
1
-
-
公有子網路:必須使用下列格式進行標記。這樣一來 Kubernetes 知道只使用為外部負載平衡器指定的子網路。如此一來,Kubernetes 不會選擇每個可用區域中的公有子網路 (根據其子網路 ID 以文字描述)。如果您在 2020 年 3 月 26 日VPC之後使用
eksctl
或 Amazon EKS AWS CloudFormation 範本來建立 ,子網路會在建立時適當標記。如需 Amazon EKS AWS CloudFormation VPC 範本的詳細資訊,請參閱 VPC 為您的 Amazon EKS叢集建立 Amazon。-
索引鍵:
kubernetes.io/role/elb
-
值:
1
-
如果未明確新增子網路角色標籤,Kubernetes 服務控制器會檢查叢集VPC子網路的路由表。這是為了判斷子網路是私有還是公有。我們建議您不要依賴此行為。而是明確地新增私有或公有角色標籤。所以此 AWS Load Balancer Controller 不會檢查路由表。其還需要存在私有和公有標籤才能成功自動探索。
-
-
AWS Load Balancer控制器
每當 建立 ALBs和必要的支援 AWS 資源時 Kubernetes 傳入資源是在具有 kubernetes.io/ingress.class: alb
註釋的叢集上建立。輸入資源會將 設定為ALB將 HTTP或HTTPS流量路由至不同的 Pods 在叢集內。為了確保您的輸入物件使用 AWS Load Balancer Controller,將下列註釋新增至您的 Kubernetes 輸入規格。如需詳細資訊,請參閱 上的輸入規格GitHub. annotations: kubernetes.io/ingress.class: alb
注意
如果您要將負載平衡至
IPv6
Pods,將下列註釋新增至您的輸入規格。您只能在IPv6
上負載平衡至 IP 目標,而不能負載平衡執行個體目標。如果沒有此註釋,負載平衡將在IPv4
上執行。
alb.ingress.kubernetes.io/ip-address-type: dualstack
-
所以此 AWS Load Balancer Controller 支援下列流量模式:
-
執行個體 – 將叢集內的節點註冊為 的目標ALB。到達
NodePort
的流量ALB會針對您的服務路由至 ,然後代理至您的 Pods。 這是預設流量模式。您也可以使用alb.ingress.kubernetes.io/target-type: instance
註釋明確指定它。注意
您的 Kubernetes 服務必須指定
NodePort
或 "LoadBalancer" 類型,才能使用此流量模式。 -
IP – 註冊 Pods 做為 的目標ALB。到達 的流量ALB會直接路由至 Pods 您的服務。您必須指定
alb.ingress.kubernetes.io/target-type: ip
註釋才能使用此流量模式。目標時需要 IP 目標類型 Pods 在 Fargate 或 Amazon EKS混合節點上執行。
-
-
若要標記控制器ALBs建立的標籤,請將下列註釋新增至控制器:
alb.ingress.kubernetes.io/tags
。如需 支援的所有可用註釋清單 AWS Load Balancer Controller,請參閱 上的輸入註釋GitHub. -
升級或降級ALB控制器版本可能會為依賴控制器版本的功能帶來重大變更。如需每個版本中引進的重大變更的詳細資訊,請參閱 上的ALB控制器版本備註
GitHub.
ALBs 與輸入群組重複使用
您可以使用 跨多個服務資源共享應用程式負載平衡器IngressGroups
。
若要將輸入加入群組,請將下列註釋新增至 Kubernetes 輸入資源規格。
alb.ingress.kubernetes.io/group.name: my-group
群組名稱必須:
-
是 63 個字元或以下的長度。
-
由小寫字母、數字、
-
和.
組成 -
開頭和結尾為字母或數字。
控制器會自動合併相同傳入群組中所有傳入的傳入規則。它使用單一 來支援它們ALB。在傳入中定義的大多數註解僅適用於該傳入定義的路徑。根據預設,輸入資源不屬於任何輸入群組。
警告
潛在的安全風險
只有在所有 時,才為輸入指定輸入群組 Kubernetes 具有建立或修改輸入資源RBAC許可的使用者位於相同的信任界限內。如果您使用群組名稱新增註釋,其他 Kubernetes 使用者可以建立或修改其輸入,使其屬於相同的輸入群組。這樣做可能會產生不良行為,例如以較高優先順序規則覆寫現有規則。
您可以新增傳入資源的訂單編號。
alb.ingress.kubernetes.io/group.order: '10'
該編號可以是 1 到 1000 之間的數字。系統會先評估相同傳入群組中所有傳入數量的最低數量。系統會使用 0 值評估沒有此注釋的所有傳入。具有較高數量的重複規則可以覆寫具有較低數量的規則。根據預設,相同傳入群組中傳入之間的規則順序是由命名空間和名稱依詞典編纂順序決定。
重要
確定相同傳入群組中的每個傳入都有唯一的優先順序編號。您無法跨輸入擁有重複的訂單號碼。
(選用) 部署範例應用程式
-
叢集 中至少有一個公有或私有子網路VPC。
-
擁有 AWS Load Balancer Controller 已部署在您的叢集上。如需詳細資訊,請參閱使用 AWS Load Balancer控制器路由網際網路流量。我們建議使用
2.7.2
版或更新版本。
您可以在具有 Amazon EC2節點 Fargate 的叢集上執行範例應用程式 Pods,或兩者。
-
如果您未部署到 Fargate,請略過此步驟。如果您要部署到 Fargate,請建立 Fargate 設定檔。您可以透過執行下列命令來建立描述檔,也可以使用命令中
name
和namespace
相同的值藉由 AWS Management Console 進行。使用自己的取代example values
。eksctl create fargateprofile \ --cluster my-cluster \ --region region-code \ --name alb-sample-app \ --namespace game-2048
-
將遊戲 2048
部署為範例應用程式,以驗證 AWS Load Balancer Controller 會 AWS ALB建立 作為輸入物件的結果。完成您要部署之子網路類型的步驟。 -
如果您要部署到 Pods 在您使用
IPv6
系列建立的叢集中,跳到下一個步驟。-
公有:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
-
私有:
-
下載清單檔案。
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
-
編輯檔案並尋找顯示
alb.ingress.kubernetes.io/scheme: internet-facing
的行。 -
將
internet-facing
變更為internal
,並儲存檔案。 -
將清單檔案套用至叢集。
kubectl apply -f 2048_full.yaml
-
-
-
如果您要部署到 Pods 在您使用 IPv6 系列建立的叢集中,完成下列步驟。
-
下載清單檔案。
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
-
在編輯器中開啟檔案,然後在傳入規格中新增以下一行註釋。
alb.ingress.kubernetes.io/ip-address-type: dualstack
-
如果您要將負載平衡載入至內部 Pods,而不是面向網際網路 Pods,將表示 的行變更為
alb.ingress.kubernetes.io/scheme:
internet-facing
alb.ingress.kubernetes.io/scheme: internal
-
儲存檔案。
-
將清單檔案套用至叢集。
kubectl apply -f 2048_full.yaml
-
-
-
幾分鐘後,使用下列指令來驗證傳入資源已建立。
kubectl get ingress/ingress-2048 -n game-2048
範例輸出如下。
NAME CLASS HOSTS ADDRESS PORTS AGE ingress-2048 <none> * k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.region-code.elb.amazonaws.com 80 2m32s
注意
若在私有子網路中建立負載平衡器,則先前輸出中位於
ADDRESS
下的值前面會加上internal-
。
如果您的輸入在幾分鐘後未成功建立,請執行下列命令來檢視 AWS Load Balancer Controller 日誌。這些日誌可能包含錯誤訊息,您可用於診斷部署的相關問題。
kubectl logs -f -n kube-system -l app.kubernetes.io/instance=aws-load-balancer-controller
-
如果您部署到公有子網路,請開啟瀏覽器,並從
ADDRESS
URL先前的命令輸出導覽至 ,以查看範例應用程式。如果您沒有看到任何內容,請重新整理瀏覽器,然後再試一次。如果您部署到私有子網路,則需要從 內的裝置檢視頁面VPC,例如堡壘主機。如需詳細資訊,請參閱 AWS上的 Linux 堡壘主機。 -
完成對範例應用程式的實驗後,請透過執行下列命令之一將其刪除。
-
如果您應用了清單檔案,而不是應用下載的複本,請使用以下命令。
kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
-
如果您下載並編輯清單檔案,請使用下列命令。
kubectl delete -f 2048_full.yaml
-