為網路連線中斷做好準備 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為網路連線中斷做好準備

如果您的區域網路失去與 AWS 雲端 之間的連線,您可以繼續使用 Outpost 上的本機 Amazon EKS 叢集。本主題包含如何準備本機叢集以應對網路連線中斷和相關考量事項。

準備本機叢集以應對網路連線中斷時的考量事項:
  • 本機叢集可在出現暫時且意外的網路連線中斷時提供穩定性和持續運作。AWS Outposts 仍為完整連線方案,可作為您資料中心中 AWS 雲端 的擴充功能運作。如果 Outpost 與 AWS 雲端 之間的網路連線中斷,則我們建議您嘗試恢復連線。如需說明,請參閱《AWS Outposts 使用者指南》中的 AWS Outposts 機架網路疑難排解檢查清單。如需有關如何針對本機叢集問題進行疑難排解的詳細資訊,請參閱 AWS Outposts 上 Amazon EKS 本機叢集疑難排解

  • Outpost 會發射 ConnectedStatus 指標,您可用此指標來監控 Outpost 的連線狀態。如需詳細資訊,請參閱 AWS Outposts 使用者指南中的 Outpost 指標

  • 本機叢集會使用 IAM 作為預設身分驗證機制,該機制使用 Kubernetes 的 AWS Identity and Access Management 驗證器。IAM 在網路連線中斷期間無法使用。因此,本機叢集會使用 x.509 憑證支援替代身分驗證機制,您可使用這些憑證在網路連線中斷期間連線至叢集。如需有關如何取得和使用您叢集 x.509 憑證的資訊,請參閱 在網路連線中斷期間針對本機叢集進行身分驗證

  • 如果您無法在網路連線中斷期間存取 Route 53,請考慮在內部部署環境中使用本機 DNS 伺服器。Kubernetes 控制平面執行個體會使用靜態 IP 地址。您可使用端點主機名稱和 IP 地址來設定用來連線至叢集的主機,以此作為使用本機 DNS 伺服器的替代方法。如需詳細資訊,請參閱《AWS Outposts使用者指南》中的 DNS

  • 如果您預期應用程式流量會在網路連線中斷期間增加,則可在連線至雲端時在叢集中佈建備用運算容量。AWS Outposts 的價格已包含 Amazon EC2 執行個體。因此,執行備用執行個體不會影響您的 AWS 用量成本。

  • 在網路連線中斷期間,若要啟用工作負載的建立、更新和擴展操作,則必須可透過區域網路存取應用程式的容器映像,且叢集須有足夠容量。本機叢集不會為您託管容器登錄檔。如果先前已在這些節點上執行 Pods,則系統會在節點上快取容器映像。如果您通常會從雲端中的 Amazon ECR 提取應用程式的容器映像,則請考慮執行本機快取或登錄檔。如果您在網路連線中斷期間需要建立、更新和擴展工作負載資源的操作,則本機快取或登錄會很有幫助。

  • 本機叢集會使用 Amazon EBS 作為持久性磁碟區的預設儲存類別,並使用 Amazon EBS CSI 驅動程式管理 Amazon EBS 持久性磁碟區的生命週期。在網路連線中斷期間,無法建立、更新或擴展由 Amazon EBS 支援的 Pods。這是因為這些操作需要呼叫雲端中的 Amazon EBS API。如果您要在本機叢集上部署具狀態的工作負載,且在網路連線中斷期間需要建立、更新或擴展操作,則請考慮使用替代儲存機制。

  • 如果 AWS Outposts 無法存取相關的 AWS 區域內 API (例如適用於 Amazon EBS 或 Amazon S3 的 API),就無法建立或刪除 Amazon EBS 快照。

  • 將 ALB (輸入) 與 AWS Certificate Manager (ACM) 整合時,會將憑證推送並儲存在 AWS Outposts ALB 運算執行個體的記憶體中。如果與 AWS 區域 中斷連線,目前的 TLS 終止將繼續運作。在此內容中變動操作將會失敗 (例如新的輸入定義、新的 ACM 型憑證 API 操作、ALB 運算規模或憑證輪換)。如需詳細資訊,請參閱 AWS Certificate Manager 使用者指南中的針對受管憑證續約進行疑難排解

  • Amazon EKS 控制平面日誌會在網路連線中斷期間於 Kubernetes 控制平面執行個體上進行本機快取。重新連線後,記錄檔會傳送至父系中的 CloudWatch 記錄檔AWS 區域。您可以使用 PrometheusGrafana 或 Amazon EKS 合作夥伴解決方案,以透過 Kubernetes API 伺服器的指標端點或使日誌的 Fluent Bit 在本機上監控叢集。

  • 如果您正為應用程式流量使用 Outposts 上的 AWS Load Balancer Controller,前端是 AWS Load Balancer Controller 的現有 Pods 會在網路連線中斷期間持續接收流量。在 Outpost 重新連線至 AWS 雲端 之前,在網路連線中斷期間建立的新 Pods 皆不會接收流量。請考慮在連線至 AWS 雲端 時為您的應用程式設定複本計數,以滿足網路連線中斷期間的擴展需求。

  • Amazon VPC CNI plugin for Kubernetes 預設為次要 IP 模式。其使用 WARM_ENI_TARGET=1 來設定,這會允許外掛程式保留可用 IP 地址的「完整彈性網路介面」。請依據中斷連線狀態期間的擴展需求來考慮變更 WARM_ENI_TARGETWARM_IP_TARGETMINIMUM_IP_TARGET 值。如需詳細資訊,請參閱上的外掛程式readme檔案 GitHub。有關每個執行個體類型所支援Pods的最大數目清單,請參閱(詳見)的eni-max-pods.txt檔案 GitHub。

在網路連線中斷期間針對本機叢集進行身分驗證

AWS Identity and Access Management (IAM) 在網路連線中斷期間無法使用。中斷連線時,您無法使用 IAM 憑證對本機叢集進行身分驗證。但是,您可以在中斷連線時使用 x509 憑證,透過區域網路連接至您的叢集。您需要下載並存放客戶端 X509 憑證,以在中斷連線期間使用。本此主題中,您將了解如何在中斷連線時建立和使用憑證對叢集進行身分驗證。

  1. 建立憑證簽署請求。

    1. 產生憑證簽署請求。

      openssl req -new -newkey rsa:4096 -nodes -days 365 \ -keyout admin.key -out admin.csr -subj "/CN=admin"
    2. 在 Kubernetes 中建立憑證簽署請求。

      BASE64_CSR=$(cat admin.csr | base64 -w 0) cat << EOF > admin-csr.yaml apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: admin-csr spec: signerName: kubernetes.io/kube-apiserver-client request: ${BASE64_CSR} usages: - client auth EOF
  2. 使用 kubectl 建立憑證簽署請求。

    kubectl create -f admin-csr.yaml
  3. 檢查憑證簽署請求的狀態。

    kubectl get csr admin-csr

    範例輸出如下。

    NAME AGE REQUESTOR CONDITION admin-csr 11m kubernetes-admin Pending

    Kubernetes 已建立憑證簽署請求。

  4. 核准憑證簽署請求。

    kubectl certificate approve admin-csr
  5. 重新檢查核准的憑證簽署請求狀態。

    kubectl get csr admin-csr

    範例輸出如下。

    NAME AGE REQUESTOR CONDITION admin-csr 11m kubernetes-admin Approved
  6. 擷取並驗證憑證。

    1. 擷取憑證。

      kubectl get csr admin-csr -o jsonpath='{.status.certificate}' | base64 --decode > admin.crt
    2. 驗證憑證。

      cat admin.crt
  7. 建立與 admin 使用者綁定的叢集角色。

    kubectl create clusterrolebinding admin --clusterrole=cluster-admin \ --user=admin --group=system:masters
  8. 產生中斷連線狀態的使用者範圍 kubeconfig。

    您可以使用下載的 admin 憑證來產生 kubeconfig 檔案。取代下列命令中的 my-clusterapiserver-endpoint

    aws eks describe-cluster --name my-cluster \ --query "cluster.certificateAuthority" \ --output text | base64 --decode > ca.crt
    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
  9. 檢視您的 kubeconfig 檔案。

    kubectl get nodes --kubeconfig admin.kubeconfig
  10. 如果您在 Outpost 上已有生產中的服務,請跳過此步驟。如果 Amazon EKS 是您 Outpost 上唯一執行的服務,且 Outpost 目前尚未處於生產中,則您可模擬網路連線中斷。在您使用本機叢集進入生產之前,模擬中斷連線以確保在中斷連線狀態下可存取叢集。

    1. 在連接 Outpost 至 AWS 區域 的聯網裝置上套用防火牆規則。這會中斷 Outpost 連結的服務。您無法建立任何新的執行個體。目前執行中的執行個體會失去與 AWS 區域 和網際網路的連線。

    2. 您可在中斷連線時使用 x509 憑證,測試連結至您本機叢集的連線。請確保將您的 kubeconfig 變更為您在上一步中建立的 admin.kubeconfig。使用您本機叢集的名稱取代 my-cluster

      kubectl config use-context admin@my-cluster --kubeconfig admin.kubeconfig

    如果您在本機叢集處於中斷連線狀態時發現任何問題,建議您開啟支援票證。