kube-proxy 运行在所有 worker 节点上,它监听 apiserver 中 service 和 endpoint 的变化情况,创建路由规则以提供服务 IP 和负载均衡功能。
讲解部署 ipvs 模式的 kube-proxy 过程。
注意:如果没有特殊指明,所有操作均在 qist 节点上执行,然后远程分发文件和执行命令。
创建证书签名请求:
cd /opt/k8s/work
cat > /opt/k8s/cfssl/k8s/kube-proxy.json << EOF
{
"CN": "system:kube-proxy",
"hosts": [""],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "GuangZhou",
"O": "system:node-proxier",
"OU": "Kubernetes-manual"
}
]
}
EOF
生成证书和私钥:
cd /opt/k8s/work
cfssl gencert \
-ca=/opt/k8s/cfssl/pki/k8s/k8s-ca.pem \
-ca-key=/opt/k8s/cfssl/pki/k8s/k8s-ca-key.pem \
-config=/opt/k8s/cfssl/ca-config.json \
-profile=kubernetes \
/opt/k8s/cfssl/k8s/kube-proxy.json | \
cfssljson -bare /opt/k8s/cfssl/pki/k8s/kube-proxy
ls /opt/k8s/cfssl/pki/k8s/kube-proxy*
cd /opt/k8s/kubeconfig
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/cfssl/pki/k8s/k8s-ca.pem \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials system:kube-proxy \
--client-certificate=/opt/k8s/cfssl/pki/k8s/kube-proxy.pem \
--client-key=/opt/k8s/cfssl/pki/k8s/kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes \
--user=system:kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
分发 kubeconfig 文件:
cd /opt/k8s/kubeconfig
scp kube-proxy.kubeconfig root@192.168.2.175:/apps/k8s/conf
scp kube-proxy.kubeconfig root@192.168.2.176:/apps/k8s/conf
scp kube-proxy.kubeconfig root@192.168.2.177:/apps/k8s/conf
scp kube-proxy.kubeconfig root@192.168.2.185:/apps/k8s/conf
scp kube-proxy.kubeconfig root@192.168.2.187:/apps/k8s/conf
scp kube-proxy.kubeconfig root@192.168.3.62:/apps/k8s/conf
scp kube-proxy.kubeconfig root@192.168.3.70:/apps/k8s/conf
从 v1.10 开始,kube-proxy 部分参数可以配置文件中配置。可以使用 –write-config-to 选项生成该配置文件。
创建 kube-proxy配置:
以 k8s-master-1 为例
修改以下参数为对应节点名字跟kubelet一致:
--hostname-override=k8s-master-1
所有节点执行
cat > /apps/k8s/conf/kube-proxy <<EOF
KUBE_PROXY_OPTS="--logtostderr=true \
--v=2 \
--masquerade-all=true \
--proxy-mode=ipvs \
--profiling=true \
--ipvs-min-sync-period=5s \
--ipvs-sync-period=5s \
--ipvs-scheduler=rr \
--conntrack-max-per-core=0 \
--cluster-cidr=10.80.0.0/12 \
--log-dir=/apps/k8s/log \
--metrics-bind-address=0.0.0.0 \
--alsologtostderr=true \
--hostname-override=k8s-master-1 \
--kubeconfig=/apps/k8s/conf/kube-proxy.kubeconfig"
EOF
cd /opt/k8s/work
cat > kube-proxy.service <<EOF
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
LimitNOFILE=655350
LimitNPROC=655350
LimitCORE=infinity
LimitMEMLOCK=infinity
EnvironmentFile=-/apps/k8s/conf/kube-proxy
ExecStart=/apps/k8s/bin/kube-proxy \$KUBE_PROXY_OPTS
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
分发
kube-proxy systemd unit 文件:
cd /opt/k8s/work
scp kube-proxy.service root@192.168.2.175:/usr/lib/systemd/system/
scp kube-proxy.service root@192.168.2.176:/usr/lib/systemd/system/
scp kube-proxy.service root@192.168.2.177:/usr/lib/systemd/system/
scp kube-proxy.service root@192.168.2.185:/usr/lib/systemd/system/
scp kube-proxy.service root@192.168.2.187:/usr/lib/systemd/system/
scp kube-proxy.service root@192.168.3.62:/usr/lib/systemd/system/
scp kube-proxy.service root@192.168.3.70:/usr/lib/systemd/system/
所有节点执行
# 全局刷新service
systemctl daemon-reload
# 设置kubelet开机启动
systemctl enable kubelet
#重启kubelet
systemctl restart kubelet
所有节点执行
systemctl status kube-proxy|grep Active
确保状态为 active (running) ,否则查看日志,确认原因:
journalctl -u kube-proxy
[root@k8s-master-1 conf]# netstat -lnpt|grep kube-prox
tcp6 0 0 :::10249 :::* LISTEN
906/kube-proxy
tcp6 0 0 :::10256 :::* LISTEN
906/kube-proxy
任意节点执行
/usr/sbin/ipvsadm -ln
预期输出:
[root@k8s-master-1 conf]# /usr/sbin/ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.66.0.1:443 rr
-> 192.168.2.175:5443 Masq 1 2 0
-> 192.168.2.176:5443 Masq 1 4 0
-> 192.168.2.177:5443 Masq 1 0 0
可见所有通过 https 访问 K8S SVC kubernetes 的请求都转发到 kube-apiserver 节点的 5443 端口;
期待下次的分享,别忘了三连支持博主呀~
我是 念舒_C.ying ,期待你的关注~
附专栏链接
【云原生 · Kubernetes】部署高可用kube-scheduler集群
【云原生 · Kubernetes】部署高可用 kube-controller-manager 集群
【云原生 · Kubernetes】runtime组件
【云原生 · Kubernetes】apiserver高可用
【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(三)
【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(二)
【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(一)
【云原生 · Kubernetes】Kubernetes 编排部署GPMall(一)
手机扫一扫
移动阅读更方便
你可能感兴趣的文章