Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
如何在 Amazon EKS 中配置 ipvs kube-proxy 模式?
我想将 Amazon Elastic Kubernetes Service (Amazon EKS) 中的 Kubernetes 网络代理模式由默认的“iptables”更改为“ipvs”。
解决方法
先决条件:
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
对于现有的 Amazon EKS 集群
要为现有 EKS 集群配置 ipvs kube-proxy 模式,请完成以下步骤:
-
确保为您的 Worker 节点启用 ipvs:
sudo ipvsadm -L当代理模式设置为默认的 iptables 时,输出结果类似于以下示例:
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn -
要确保您拥有必要的 IPVS 内核模块,请运行以下命令:
sudo lsmod | egrep -i "ip_vs|ip_vs_rr|ip_vs_wrr|ip_vs_sh|nf_conntrack" -
如果输出中缺少 IPVS 模块,请运行以下命令来安装缺失的内核模块:
sudo modprobe ip_vs sudo modprobe ip_vs_rr sudo modprobe ip_vs_wrr sudo modprobe ip_vs_sh sudo modprobe nf_conntrack -
要确定您的 kube-proxy 是托管式 Amazon EKS 插件还是自主管理型插件,请运行以下命令:
aws eks list-addons --cluster-name my-cluster | grep proxy**注意:**将 my-cluster 替换为您的集群名称。托管式 Amazon EKS 插件返回 kube-proxy 作为输出。
-
根据您的插件,使用 ipvs 模式和轮循机制选项配置 kube-proxy 插件,以将流量平均分配到后备服务器。
托管式 Amazon EKS 插件aws eks update-addon --cluster-name my-cluster --addon-name kube-proxy \ --addon-version v1.24.17-eksbuild.4 \ --configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \ --resolve-conflicts OVERWRITE自主管理型插件
备份 kube-proxy 配置 Configmap:kubectl get cm kube-proxy-config -n kube-system -o yaml > kube-proxy-config-old.yml编辑 kube-proxy-config Configmap:
kubectl edit cm kube-proxy-config -n kube-system在配置中,将 mode 参数由 iptables 更改为 ipvs,然后将 scheduler 更改为 rr 用于轮循机制。
... ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "rr" # add rr syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 mode: "ipvs" # change from iptables ...要应用配置更改,请重新加载您的集群 Worker 节点。使用 eksctl 横向缩减和横向扩展 Worker 节点:
# get node group names eksctl get nodegroup --cluster=my-cluster # scale-in eksctl scale nodegroup --cluster=my-cluster --nodes=0 --name=my-nodegroup-name --nodes-min=0 --nodes-max=3 --wait # scale-out eksctl scale nodegroup --cluster=my-cluster --nodes=2 --name=my-nodegroup-name --nodes-min=2 --nodes-max=3 --wait**注意:**将 my-cluster 和 my-nodegroup-name 替换为您的参数。横向扩展时,请根据您的集群需求替换节点数。
-
要验证是否已配置 ipvs 模式,请运行以下命令:
sudo ipvsadm -L输出示例:
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ip-10-100-0-1.eu-west-1.comp rr -> ip-192-168-118-22.eu-west-1. Masq 1 5 0 -> ip-192-168-187-76.eu-west-1. Masq 1 6 0 TCP ip-10-100-0-10.eu-west-1.com rr -> ip-192-168-168-152.eu-west-1 Masq 1 0 0 -> ip-192-168-183-81.eu-west-1. Masq 1 0 0 UDP ip-10-100-0-10.eu-west-1.com rr -> ip-192-168-168-152.eu-west-1 Masq 1 0 0 -> ip-192-168-183-81.eu-west-1. Masq 1 0 0TCP 和 UDP 条目适用于集群中的 Kubernetes 和 CoreDNS 服务。
-
要确保集群中没有 kube-svc* 的 iptables 条目,请运行以下命令:
sudo iptables-save | grep -i kube-svc如果集群中没有 iptables,则前面的命令不会生成输出。
对于新的 Amazon EKS 集群
要为新的 EKS 集群配置 ipvs kube-proxy 模式,请完成以下步骤:
-
创建节点组时,引导 Worker 节点用户数据以安装 IPVS 依赖项:
... #!/bin/bash echo "Running custom user data script" yum install -y ipvsadm ipvsadm -l modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh modprobe ip_vs_lc modprobe nf_conntrack ... -
要使用 IPVS 参数为 kube-proxy 创建托管式 Amazon EKS 插件,请运行以下命令:
aws eks create-addon --cluster-name my-cluster --addon-name kube-proxy \ --addon-version v1.29.0-minimal-eksbuild.1 \ --configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \ --resolve-conflicts OVERWRITE**注意:**将 v1.29.0-minimal-eksbuild.1 替换为与您的 Amazon EKS 集群版本兼容的最新可用 kube-proxy 版本。有关详细信息,请参阅更新 Kubernetes kube-proxy 自主管理型插件。
相关信息
Kubernetes 网站上的代理模式
Kubernetes 网站上的在 Kubernetes 集群中使用 NodeLocal DNSCache 的配置
- 语言
- 中文 (简体)
