設定混合節點的代理 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

設定混合節點的代理

如果您在內部部署環境中為離開資料中心或邊緣環境的流量使用代理伺服器,則您需要將節點和叢集分別設定為使用代理伺服器。

叢集

在叢集上,您需要設定 kube-proxy,以使用您的代理伺服器。在建立 Amazon EKS 叢集後,您必須設定 kube-proxy

節點

在節點上,您必須設定作業系統、containerdkubelet 和 Amazon SSM 代理程式,以使用您的代理伺服器。您可以在作業系統映像的建置程序期間或在每個混合節點上執行 nodeadm init 之前,進行這些變更。

節點層級組態

您必須在作業系統映像中或在每個混合節點上執行 nodeadm init 之前,套用下列組態。

containerd 代理組態

containerd 是 Kubernetes 的預設容器管理執行時期。如果您使用代理進行網際網路存取,則必須設定 containerd,如此才能提取 Kubernetes 和 Amazon EKS 所需的容器映像。

使用下列內容,在 /etc/systemd/system/containerd.service.d 目錄中稱為 http-proxy.conf 的每個混合節點上,建立檔案。將 proxy-domainport 取代為您環境的值。

[Service] Environment="HTTP_PROXY=http://proxy-domain:port" Environment="HTTPS_PROXY=http://proxy-domain:port" Environment="NO_PROXY=localhost"

來自使用者資料的 containerd 組態

需要為此檔案建立 containerd.service.d 目錄。您需要重新載入 systemd,才能在不重新啟動的情況下取得組態檔案。在 AL2023 中,當您的指令碼執行時,服務可能已在執行中,因此您還需要將其重新啟動。

mkdir -p /etc/systemd/system/containerd.service.d echo '[Service]' > /etc/systemd/system/containerd.service.d/http-proxy.conf echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf echo 'Environment="NO_PROXY=localhost"' >> /etc/systemd/system/containerd.service.d/http-proxy.conf systemctl daemon-reload systemctl restart containerd

kubelet 代理組態

kubelet 是在每個 Kubernetes 節點上執行的 Kubernetes 節點代理程式,且需負責管理其上執行的節點和 Pod。如果您在內部部署環境中使用代理,則必須設定 kubelet,如此才能與您 Amazon EKS 叢集的公有或私有端點通訊。

使用下列內容,在 /etc/systemd/system/kubelet.service.d/ 目錄中稱為 http-proxy.conf 的每個混合節點上,建立檔案。將 proxy-domainport 取代為您環境的值。

[Service] Environment="HTTP_PROXY=http://proxy-domain:port" Environment="HTTPS_PROXY=http://proxy-domain:port" Environment="NO_PROXY=localhost"

來自使用者資料的 kubelet 組態

必須為此檔案建立 kubelet.service.d 目錄。您需要重新載入 systemd,才能在不重新啟動的情況下取得組態檔案。在 AL2023 中,當您的指令碼執行時,服務可能已在執行中,因此您還需要將其重新啟動。

mkdir -p /etc/systemd/system/kubelet.service.d echo '[Service]' > /etc/systemd/system/kubelet.service.d/http-proxy.conf echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf echo 'Environment="NO_PROXY=localhost"' >> /etc/systemd/system/kubelet.service.d/http-proxy.conf systemctl daemon-reload systemctl restart kubelet

ssm 代理組態

ssm 是可用於初始化混合節點的憑證提供者之一。ssm 負責使用 AWS 來進行驗證以及產生 kubelet 使用的臨時憑證。如果您在內部部署環境中使用代理,並使用 ssm 作為節點上的憑證提供者,則必須設定 ssm,以便其可以與 Amazon SSM 服務端點通訊。

根據作業系統,在下列路徑中稱為 http-proxy.conf 的每個混合節點上,建立檔案

  • Ubuntu - /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d/http-proxy.conf

  • Amazon Linux 2023 和 Red Hat Enterprise Linux - /etc/systemd/system/amazon-ssm-agent.service.d/http-proxy.conf

使用下列內容填入檔案。將 proxy-domainport 取代為您環境的值。

[Service] Environment="HTTP_PROXY=http://proxy-domain:port" Environment="HTTPS_PROXY=http://proxy-domain:port" Environment="NO_PROXY=localhost"

來自使用者資料的 ssm 組態

必須為此檔案建立 ssm systemd 服務檔案目錄。目錄路徑取決於節點上使用的作業系統。

  • Ubuntu - /etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service.d

  • Amazon Linux 2023 和 Red Hat Enterprise Linux - /etc/systemd/system/amazon-ssm-agent.service.d

根據節點上使用的作業系統,取代以下重新啟動命令中的 systemd 服務名稱

  • Ubuntu - snap.amazon-ssm-agent.amazon-ssm-agent

  • Amazon Linux 2023 和 Red Hat Enterprise Linux - amazon-ssm-agent

mkdir -p systemd-service-file-directory echo '[Service]' > [.replaceable]#systemd-service-file-directory/http-proxy.conf echo 'Environment="HTTP_PROXY=http://[.replaceable]#proxy-domain:port"' >> systemd-service-file-directory/http-proxy.conf echo 'Environment="HTTPS_PROXY=http://[.replaceable]#proxy-domain:port"' >> [.replaceable]#systemd-service-file-directory/http-proxy.conf echo 'Environment="NO_PROXY=localhost"' >> [.replaceable]#systemd-service-file-directory/http-proxy.conf systemctl daemon-reload systemctl restart [.replaceable]#systemd-service-name

作業系統代理組態

如果您使用代理進行網際網路存取,則必須將作業系統設定為能夠從作業系統的套件管理工具提取混合節點相依性。

Ubuntu

  1. 透過以下命令,設定 snap 以使用您的代理:

    sudo snap set system proxy.https=http://proxy-domain:port sudo snap set system proxy.http=http://proxy-domain:port
  2. 若要啟用 apt 的代理,請在 /etc/apt/ 目錄中建立稱為 apt.conf 的檔案。將代理網域和連接埠取代為您環境的值。

    Acquire::http::Proxy "http://proxy-domain:port"; Acquire::https::Proxy "http://proxy-domain:port";

Amazon Linux 2023

  1. 設定 dnf 以使用您的代理。為您的環境建立具有代理網域和連接埠值的檔案 /etc/dnf/dnf.conf

    proxy=http://proxy-domain:port

Red Hat Enterprise Linux

  1. 設定 yum 以使用您的代理。為您的環境建立具有代理網域和連接埠值的檔案 /etc/yum.conf

    proxy=http://proxy-domain:port

IAM Roles Anywhere 代理組態

IAM Roles Anywhere 憑證提供者服務負責在搭配 enableCredentialsFile 旗標使用 IAM Roles Anywhere 時重新整理憑證 (請參閱 EKS Pod 身分識別代理程式)。如果您在內部部署環境中使用代理,則必須設定服務,以便其可以與 IAM Roles Anywhere 端點通訊。

使用下列內容,在 /etc/systemd/system/aws_signing_helper_update.service.d/ 目錄中,建立稱為 http-proxy.conf 的檔案。將 proxy-domainport 取代為您環境的值。

[Service] Environment="HTTP_PROXY=http://proxy-domain:port" Environment="HTTPS_PROXY=http://proxy-domain:port" Environment="NO_PROXY=localhost"

整個叢集的組態

建立 Amazon EKS 叢集之後以及在每個混合節點上執行 nodeadm init 之前,必須套用本節中的組態。

kube-proxy 代理組態

當您的混合節點加入叢集時,Amazon EKS 會自動在每個混合節點上安裝 kube-proxy 作為 DaemonSet。kube-proxy 會在由 Amazon EKS 叢集上的 Pod 支援的 服務之間啟用路由。若要設定每個主機,kube-proxy 需要對您的 Amazon EKS 叢集端點進行 DNS 解析。

  1. 使用下列命令編輯 kube-proxy DaemonSet

    kubectl -n kube-system edit ds kube-proxy

    這將會在設定的編輯器上開啟 kube-proxy DaemonSet 定義。

  2. 新增 HTTP_PROXYHTTPS_PROXY 的環境變數。請注意,NODE_NAME 環境變數應該已存在於您的組態中。將 proxy-domainport 取代為您環境的值。

    containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --hostname-override=$(NODE_NAME) env: - name: HTTP_PROXY value: http://proxy-domain:port - name: HTTPS_PROXY value: http://proxy-domain:port - name: NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName