協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在使用 EC2 執行個體存放區設定的 AWS Outpost 上準備本機 Amazon EKS 叢集以進行網路中斷連線
如果將本機網路連線至 AWS 雲端的 AWS Outposts 服務連結失去連線,您可以繼續使用 Outpost 上的本機 Amazon EKS 叢集。本主題涵蓋如何準備本機叢集以進行網路連線中斷和相關考量。
-
本機叢集可在臨時、意外的網路中斷連線期間實現穩定性和持續操作。 AWS Outposts 仍然是完全連線的方案,可做為資料中心中 AWS 雲端的延伸。如果您的 Outpost 和 AWS 雲端之間發生網路中斷連線,建議您嘗試還原連線。如需說明,請參閱 AWS Outposts 使用者指南中的 Outposts 機架網路故障診斷檢查清單。 AWS
-
Outpost 會發射
ConnectedStatus指標,您可用此指標來監控 Outpost 的連線狀態。如需詳細資訊,請參閱 Outposts 使用者指南中的 Outposts 指標。 AWS
網路連線中斷期間的身分驗證
本機叢集支援多個身分驗證機制。它們在網路連線中斷期間的可用性會有所不同:
| 身分驗證機制 | 在中斷連線期間可用? |
|---|---|
|
AWS IAM (存取項目、 |
否。IAM 需要連線至 AWS 區域。 |
|
OIDC (客戶提供的供應商) |
取決於供應商位置。如果可從 Outpost 的本機網路存取 OIDC 供應商,身分驗證會繼續運作。 |
|
x.509 用戶端憑證 |
是。憑證由 Kubernetes API 伺服器在本機進行驗證。 |
|
IRSA (服務帳戶的 IAM 角色) |
否。請參閱中斷連線期間的 IRSA 和 Pod 身分。 |
|
EKS Pod 身分識別 |
否。請參閱中斷連線期間的 IRSA 和 Pod 身分。 |
x.509 用戶端憑證
若要在網路中斷連線期間維持kubectl存取,請在中斷連線發生之前建立用戶端 x.509 憑證。
若要建立管理員憑證:
-
產生私有金鑰和憑證簽署請求 (CSR):
openssl req -new -newkey rsa:4096 -nodes \ -keyout admin.key -out admin.csr -subj "/CN=admin" -
建立並核准 Kubernetes
CertificateSigningRequest資源:cat admin.csr | base64 | tr -d '\n' > admin.csr.b64apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: admin-csr spec: request: <base64-encoded-csr> signerName: kubernetes.io/kube-apiserver-client usages: - client authkubectl apply -f admin-csr.yaml kubectl certificate approve admin-csr -
擷取已簽章的憑證:
kubectl get csr admin-csr -o jsonpath='{.status.certificate}' | base64 --decode > admin.crt -
建立
ClusterRoleBinding以授予管理員存取權:kubectl create clusterrolebinding admin --clusterrole=cluster-admin \ --user=admin --group=system:masters -
建置
kubeconfig使用憑證的 :kubectl config --kubeconfig admin.kubeconfig set-cluster my-cluster \ --certificate-authority=ca.crt --server $APISERVER_ENDPOINT --embed-certs kubectl config --kubeconfig admin.kubeconfig set-credentials admin \ --client-certificate=admin.crt --client-key=admin.key --embed-certs kubectl config --kubeconfig admin.kubeconfig set-context admin@my-cluster \ --cluster my-cluster --user admin kubectl config --kubeconfig admin.kubeconfig use-context admin@my-cluster
中斷連線期間的叢集端點 DNS 解析
本機叢集的 Kubernetes API 伺服器端點託管於 Amazon Route 53,並解析為 Amazon EKS 在您的子網路中建立的跨帳戶彈性網路界面 (ENIs) 的私有 IP 地址。這些 ENIs 具有靜態私有 IP 地址,在正常叢集操作期間不會變更。
在網路中斷連線期間,Outpost 無法到達 Route 53,因此叢集端點主機名稱無法解析,除非您準備好本機解析路徑。三種類型的用戶端需要連線到 API 伺服器:
-
執行 的叢集管理員
kubectl。 -
工作者節點 (
kubelet) 傳送節點活動訊號和提取規格。 -
kube-proxy在每個節點上,設定叢集服務 IPs。
選項 1:本機 DNS 解決方案 (建議)
AWS 建議部署本機 DNS 解決方案,快取叢集端點記錄,並在 Outpost 中斷連線時為其提供服務。您可以在快取叢集端點記錄的內部部署環境中執行自己的 DNS 伺服器。
如果您使用本機 DNS 解決方案,建議您將 kubeconfig和工作者節點 AMIs 指向叢集端點主機名稱 (而不是 ENI IP 地址),以便解析與本機 DNS 解決方案一致。
選項 2:靜態 IP 型存取
如果您不想執行本機 DNS 解決方案,您可以使用靜態 IP 型存取。
-
管理員:設定
kubeconfig以直接指向跨帳戶 ENI 私有 IP 地址。透過搜尋Amazon EKSAWS 帳戶中描述的網路介面來尋找 ENIs。在正常操作下,每個 ENI 的 IP 地址在叢集的生命週期內都是穩定的。cluster-name -
工作者節點 (Amazon EKS 最佳化 AMIs):當您從 Amazon EKS 最佳化 AMI 啟動工作者節點時,引導指令碼會使用 ENI IP 地址
/etc/hosts將叢集端點新增至 。不需要額外的組態。 -
工作者節點 (自訂 AMIs):將叢集端點主機名稱和 ENI IP 地址新增至自訂引導
/etc/hosts中的 。否則,kubelet和kube-proxy無法在中斷連線期間連線到 API 伺服器。
重要
如果刪除跨帳戶 ENI 或其 IP 地址變更,例如,如果您刪除或修改它,以防止 Amazon EKS 重新連接它,則每個節點和每個使用靜態 IP 型存取的管理員都必須手動更新。使用本機 DNS 解決方案時,不需要手動介入。
中斷連線期間的 Pod DNS 解析
若要防止中斷連線操作期間的 DNS 失敗,請將工作者節點啟動範本設定為覆寫kubelet’s `resolvConf設定。在您的使用者資料中,建立只包含 (沒有 VPC 搜尋網域/etc/kubernetes/resolv.conf) 的自訂resolv.conf檔案 nameserver 10.0.0.2(例如 ),然後在您的 spec.kubelet.config.resolvConf: /etc/kubernetes/resolv.conf中設定 NodeConfig。這會從 Pod DNS 組態中移除 搜尋網域,防止查詢在中斷連線時轉送到無法連線的 VPC DNS 解析程式。region-code.compute.internal
下列範例顯示工作者節點 userdata:
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="BOUNDARY" --BOUNDARY Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash mkdir -p /etc/kubernetes echo "nameserver [.replaceable]``10.0.0.2``" > /etc/kubernetes/resolv.conf --BOUNDARY Content-Type: application/node.eks.aws --- apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: name: my-cluster ... kubelet: config: resolvConf: /etc/kubernetes/resolv.conf --BOUNDARY--
中斷連線期間的 IRSA 和 Pod 身分
重要
IRSA 和 EKS Pod Identity 取決於在 AWS 區域中執行的 AWS STS。在網路連線中斷期間,使用 IRSA 或 Pod Identity 的工作負載無法取得新的登入資料。現有的登入資料會在一段時間後過期。
對於必須在網路中斷期間保持可用的工作負載,我們不建議對區域型 AWS 服務採用功能或操作相依性。
etcd 中斷連線期間的行為
在網路連線中斷期間,無法備份etcd快照。如果在中斷連線期間多個etcd執行個體無法使用, 會etcd遺失規定人數,而且在 Outpost 重新連線並還原規定人數之前,無法使用 Kubernetes API etcd 操作。已經在執行的工作負載會繼續運作。
在中斷連線期間控制平面記錄
在網路連線中斷期間,控制平面日誌會在控制平面執行個體上本機快取。恢復連線時,日誌會傳送至父 AWS 區域中的 Amazon CloudWatch Logs。您不需要在控制平面上安裝或維護任何記錄代理程式。
本機可觀測性
您可以使用 Prometheus
本機映像儲存庫
若要使用其他複本擴展部署,或在中斷連線期間從 Pod 故障中復原,您必須擁有本機容器映像儲存庫 (例如 Docker 登錄檔),或在中斷連線之前必須在節點上快取映像。Amazon ECR 在網路連線中斷期間無法使用。
調校 Kubernetes Pod 容錯移轉行為
在網路中斷連線期間,Kubernetes 控制平面無法與 AWS 區域通訊。如果節點變得無法連線,預設的 Kubernetes 行為是在逾時期間之後移出 Pod。您可以使用公差和 Pod 規格tolerationSeconds來調整此行為,以控制在分割區期間重新排程 Pod 的速度。如需詳細指引和範例,請參閱《Amazon EKS 最佳實務指南》中的 https://docs.aws.amazon.com/eks/latest/best-practices/hybrid-nodes-network-disconnection-best-practices.html#tune_kubernetes_pod_failover_behavior【Tune Kubernetes Pod 容錯移轉行為】。
模擬網路中斷連線
使用本機叢集進入生產環境之前,請模擬中斷連線,以確認您可以在叢集處於中斷連線狀態時存取叢集。
-
在將 Outpost 連接到 AWS 區域的聯網裝置上套用防火牆規則。這會中斷 Outpost 連結的服務。
-
使用您建立的 x.509 憑證測試與本機叢集的連線:
kubectl --kubeconfig admin.kubeconfig get nodes
注意
如果您的 Outpost 已有生產中的服務,請勿模擬中斷連線。中斷連線服務連結會影響 Outpost 上執行的所有服務。