跳至內容

如何從 VPC 或對等 VPC 中,安全地存取 Amazon EKS 叢集 API 伺服器端點?

2 分的閱讀內容
0

我想要從 Amazon Virtual Private Cloud (Amazon VPC) 或對等 VPC 中,安全地存取 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集 API 伺服器端點。

簡短描述

當您建立新的 Amazon EKS 叢集時,Amazon EKS 會為受管 Kubernetes API 伺服器建立一個端點。預設情況下,API 伺服器端點對網際網路公開。系統會使用 AWS Identity and Access Management (IAM) 與原生 Kubernetes 角色型存取控制 (RBAC) 的組合來保護對 API 伺服器的存取。如需更多資訊,請參閱使用 RBAC 授權

若要從 VPC 或對等 VPC 安全地存取您的 Amazon EKS 叢集,您必須設定私有端點。如需安全最佳實務的更多資訊,請參閱安全最佳實務

解決方法

開啟 Kubernetes API 伺服器的私有存取,以便您的節點與 API 伺服器之間的所有通訊保持在您的 VPC 內。您可以限制可從網際網路存取 API 伺服器的 IP 位址,或完全關閉 API 伺服器的網際網路存取。

開啟端點私有存取後,Amazon EKS 叢集的行為會如下:

  • 所有傳往叢集 API 伺服器的流量都來自叢集的 VPC 或已連線的網路。
  • 您的 API 伺服器無法從網際網路公開存取。任何 kubectl 命令都可以在 VPC 或已連線的網路內部運作。如需連線選項,請參閱僅限私有 API 伺服器的存取
  • 公共 DNS 伺服器會將叢集的 API 伺服器端點解析為 VPC 中的私有 IP 位址。

如果現有叢集的端點未解析為 VPC 中的私有 IP 位址,請採取下列其中一個動作:

  • 開啟公開存取,然後再關閉。您對叢集只需執行一次此操作,即可讓端點解析為私有 IP 位址。
  • 更新您的叢集

當您關閉叢集的 Kubernetes API 伺服器端點公開存取時,您只能從 VPC 或已連線的網路內存取 API 伺服器。您可以透過下列任一方式存取 Kubernetes API 伺服器端點:

  • 將您的網路透過傳輸閘道或其他連線選項連線到 VPC,然後使用已連線網路中的電腦。確保您的 Amazon EKS 控制平面安全群組包含允許從已連線網路傳入 443 連接埠流量的規則。
  • 在叢集的 VPC 公共子網路中啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。然後,使用 SSH 登入該執行個體以執行 kubectl 命令。如需更多資訊,請參閱使用 Session Manager 與 Amazon EC2 Instance Connect 存取堡壘主機

使用 AWS 管理主控台修改叢集 API 伺服器端點存取

  1. 開啟 Amazon EKS console (Amazon EKS 主控台)。
  2. 選取叢集名稱以顯示叢集資訊。
  3. 開啟 Networking (網路) 索引標籤,然後選擇 Update (更新)。
  4. 選擇是否為叢集的 Kubernetes API 伺服器端點開啟或關閉私有存取。如果您開啟私有存取,則來自叢集 VPC 內的 Kubernetes API 請求會使用私有 VPC 端點。若要關閉公開存取,您必須先開啟私有存取。
  5. 選擇是否為叢集的 Kubernetes API 伺服器端點開啟或關閉公開存取。如果您關閉公開存取,則叢集的 Kubernetes API 伺服器只能接收來自叢集 VPC 內的請求。
  6. 選擇 Update (更新)。

使用 AWS CLI 修改叢集 API 伺服器端點存取

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

若要關閉端點公開存取並開啟叢集的私有端點存取,請執行以下命令:

aws eks update-cluster-config --name example \
--resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true

注意:example 替換為您的叢集名稱。

輸出範例:

{
    "update": {
        "id": "ec883c93-2e9e-407c-a22f-8f6fa6e67d4f",
        "status": "InProgress",
        "type": "EndpointAccessUpdate",
        "params": [
            {
                "type": "EndpointPublicAccess",
                "value": "false"
            },
            {
                "type": "EndpointPrivateAccess",
                "value": "true"
            }
        ],
        "createdAt": 1565806986.506,
        "errors": []
    }
}

如果您開啟私有存取,則來自叢集 VPC 內的 Kubernetes API 請求會使用私有 VPC 端點。此參數的預設值為 false,表示關閉 Kubernetes API 伺服器的私有存取。如需更多資訊,請參閱更新叢集組態

AWS 官方已更新 2 個月前