為什麼我無法從 Amazon EKS 連線至其他 AWS 服務?

2 分的閱讀內容
0

我想要對嘗試從 Amazon Elastic Kubernetes Service (Amazon EKS) 連線至其他服務時出現的錯誤進行疑難排解。

簡短描述

如果您的 Pod 無法連線至其他服務,您可能會收到下列一或多個錯誤:

  • RequestError: send request failed\\ncaused by: Post \\\"https://ec2.us-west-2.amazonaws.com/\\\": dial tcp <IP address>: i/o timeout\"\
  • Couldn't connect to host, port: imap.mail.<region>.awsapps.com,<port>; timeout -1
  • java.net .SocketTimeoutException: connect timed out
  • Connection could not be created to jdbc:postgresql://<hostname>.<region>.rds.amazonaws.com:5432/
  • <URL>.<region>.rds.amazonaws.com (<IPaddress>:3306): Operation timed out
  • Error : java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=<hostname>.<region>.rds.amazonaws.com)(port=3306)(type=master) : Socket fail to connect to host:<hostname>.<region>.rds.amazonaws.com , port:3306. connect timed out***
  • o.apache.kafka.clients.NetworkClient -[Producer clientId=producer-1] Connection to node -1 (<hostname>.c3.kafka.<region>.amazonaws.com/<IPaddress>:9092) could not be established.代理程式可能不可用。

您會收到這些錯誤的原因是網路連線問題,而其可能是由不正確的 Amazon Virtual Private Cloud (Amazon VPC) 組態所造成的。若要解決這些問題,請檢查與下列項目相關聯的安全群組和網路存取控制清單 (ACL):

  • 工作節點執行個體
  • Pod 嘗試連線的服務

解決方案

通常當安全群組規則或網路 ACL 明確拒絕必要的許可時,您就會收到連線逾時錯誤。

若要解決這些錯誤,請確認下列項目以檢查您的環境是否已正確設定:

  • 您的安全群組符合 Amazon EKS 要求。
  • 適用於 Pod 的安全群組可讓 Pod 彼此通訊。
  • 網路 ACL 不會拒絕連線。
  • 您的子網路具有可在 Amazon VPC 內進行通訊的本機路由。
  • 您的 Pod 已排程且處於「執行中」狀態。
  • 您擁有適用於 Kubernetes 的 Amazon VPC 容器網絡界面 (CNI) 外掛程式的最新可用版本。
  • 叢集的 VPC 子網路具有適用於 Pod 所需存取之 AWS 服務的 VPC 界面端點。

您的安全群組符合 Amazon EKS 要求

請確定傳入和傳出規則允許特定通訊協定和連接埠上的流量,工作節點使用這些通訊協定和連接埠與其他服務通訊。最佳實務是允許所有流量在叢集和節點之間流動,並允許所有傳出流量流動至任何目的地。每次建立具有新連接埠的新 Pod 時,您不需要變更安全群組規則。如需詳細資訊,請參閱 Amazon EKS 安全群組要求和考量事項

適用於 Pod 的安全群組可讓 Pod 彼此通訊

如果您針對 Pod自訂聯網使用安全群組,則可以將任何安全群組連接至 Pod。在此情況下,請確認安全群組允許 Pod 之間的通訊。

網路 ACL 不會拒絕連線

  • 確認您的 Amazon EKS 叢集和 VPC CIDR 之間的流量在您的網路 ACL 上自由流動。
  • 請考慮使用與安全群組中類似的規則來設定網路 ACL。

您的子網路具有可在 VPC 內進行通訊的本機路由

確認您的子網路具有用於 VPC 內通訊的預設路由。如需詳細資訊,請參閱 Amazon EKS VPC 和子網路的要求與考量事項

您的 Pod 已排程且處於「執行中」狀態

確認您的 Pod 已排程且處於「執行中」狀態。若要疑難排解您的 Pod 狀態,請參閱如何疑難排解 Amazon EKS 中的 Pod 狀態?

您有適用於 Kubernetes 的 VPC CNI 外掛程式的最新可用版本

如果您沒有執行適用於 Kubernetes 的 Amazon VPC CNI 外掛程式的最新版本,請考慮更新至最新版本

如果您仍然遇到問題,請參閱如何解決 Amazon EKS 的 kubelet 或 CNI 外掛程式問題?

叢集的 VPC 子網路必須具有 VPC 端點界面,以供 Pod 存取之服務使用

下表列出了一些常用的服務和端點:

服務端點
Amazon Elastic Compute Cloud (Amazon EC2)com.amazonaws.region-code.ec2
Amazon Elastic Container Registry (Amazon ECR)com.amazonaws.region-code.ecr.api com.amazonaws.region-code.ecr.dkr com.amazonaws.region-code.s3
Elastic Load Balancing (ELB)com.amazonaws.region-code.elasticloadbalancing
AWS X-Raycom.amazonaws.region-code.xray
Amazon CloudWatchcom.amazonaws.region-code.logs
AWS Security Token Service (AWS STS) (在服務帳戶使用 IAM 角色時為必要項目)com.amazonaws.region-code.sts
AWS App Mesh 不支援適用於 Kubernetes 的 App Mesh 控制器。如需詳細資訊,請參閱 GitHub 網站上的 App Mesh 控制器。 支援 Cluster Autoscaler。部署 Cluster Autoscaler Pod 時,請確定命令列包含 -aws-use-static-instance-list=true。如需詳細資訊,請參閱 GitHub 網站上的使用靜態執行個體清單。工作節點 VPC 還必須包括 AWS STS VPC 端點和 Amazon EC2 Auto Scaling 端點。com.amazonaws.region-code.appmesh-envoy-management

如需端點的完整清單,請參閱與 AWS PrivateLink 整合的 AWS 服務

請確定 VPC 端點的安全群組具有允許來自工作節點的流量的傳入規則。


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