为混合节点功能配置代理 - Amazon EKS

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

为混合节点功能配置代理

如果在本地环境中使用代理服务器来处理离开数据中心或边缘环境的流量,则需要配置操作系统、containerdkubeletkube-proxy 以便使用代理服务器。创建 Amazon EKS 集群后,您必须配置 kube-proxy。您可以在操作系统映像构建过程中或在每个混合节点上运行 nodeadm init 之前,对操作系统、containerdkubelet 进行更改。

节点级别配置

本节中的配置必须应用于操作系统映像中或在每个混合节点上运行 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 echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/containerd.service.d echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/containerd.service.d echo 'Environment="NO_PROXY=localhost"' >> /etc/systemd/system/containerd.service.d 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 echo 'Environment="HTTP_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/kubelet.service.d echo 'Environment="HTTPS_PROXY=http://proxy-domain:port"' >> /etc/systemd/system/kubelet.service.d echo 'Environment="NO_PROXY=localhost"' >> /etc/systemd/system/kubelet.service.d systemctl daemon-reload systemctl restart containerd

操作系统代理配置

如果使用代理来访问互联网,则必须对操作系统进行配置,以确保能够从操作系统的软件包管理器中提取混合节点依赖项。

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 和 Red Hat Enterprise Linux

  1. 配置 yum 以使用代理。创建一个具有环境的代理域和端口值的文件 /etc/yum.conf

    proxy=http://proxy-domain:port

集群范围配置

本节中的配置必须在创建 Amazon EKS 集群之后并且在每个混合节点上运行 nodeadm init 之前应用。

kube-proxy 代理配置

当混合节点加入集群时,Amazon EKS 会自动在每个混合节点上将 kube-proxy 作为 DaemonSet 安装。kube-proxy 支持在 Amazon EKS 集群上跨容器组支持的服务进行路由。要配置每台主机,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