14. 第十三篇 二进制安装kube-proxy

2022-11-06,,,,

文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247484231&idx=1&sn=9e722beeea3e73df52ecdf700928c7f6&chksm=e9fdd6b3de8a5fa5f6faf6c77c1974b463e2e2238129a8a346b570cb63c2c683e03c1645840d&cur_album_id=1341273083637989377&scene=189#wechat_redirect

本文是二进制安装kubernetes v1.17.0 之kube-proxy,kube-proxy是什么,这里就不得不说下service,service是一组Pod的抽象集合,它相当于一组Pod的负载均衡器,负责将请求分发到对应的pod,kube-proxy就是负责service的实现的,当请求到达service时,它通过label关联到后端并转发到某个Pod;kube-proxy提供了三种负载均衡模式:用户空间、iptables、ipvs,网上有很多关于这三种模式的区别,这里先不详述,本文采用ipvs。

kube-proxy需要运行在所有节点上(因为我们master节点也有Pod,如果没有的话,可以只部署在非master节点上),kube-proxy它主动的去监听kube-apiserver中service和endpoint的变化情况,然后根据定义的模式,创建路由规则,并提供服务service IP(headless类型的service无IP)和负载均衡功能。注意:在所有节点安装ipvsadm和ipset命令,加载ip_vs内核模块,准备章节已经执行过。

下载https://dl.k8s.io/v1.17.0/kubernetes-node-linux-amd64.tar.gz并解压,文章中使用到kube-proxy,把kube-proxy到中控机的/data/k8s/bin/目录,再把kube-proxy分发到所有节点上面/data/k8s/bin/目录中即可。

创建kubeconfig配置文件并分发

kube-proxy是作为kube-apiserver的客户端,由于我们启用了TLS,所以需要认证访问,这里我们需要使用到之前生成的证书(详情见:第三篇 PKI基础概念、cfssl工具介绍及kubernetes中证书),下面我们创建kubeconfig配置文件;

#!/bin/bash

cd /data/k8s/work
source /data/k8s/bin/env.sh kubectl config set-cluster kubernetes \
--certificate-authority=/data/k8s/work/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials kube-proxy \
--client-certificate=kube-proxy.pem \
--client-key=kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=kube-proxy.kubeconfig kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig for node_name in ${NODE_NAMES[@]}
do
echo ">>> ${node_name}"
scp kube-proxy.kubeconfig root@${node_name}:/etc/kubernetes/
done

创建kube-proxy配置文件并分发

#!/bin/bash

cd /data/k8s/work
source /data/k8s/bin/env.sh cat > kube-proxy-config.yaml.template <<EOF
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
clientConnection:
burst: 200
kubeconfig: "/etc/kubernetes/kube-proxy.kubeconfig"
qps: 100
bindAddress: ##NODE_IP##
healthzBindAddress: ##NODE_IP##:10256
metricsBindAddress: ##NODE_IP##:10249
enableProfiling: true
clusterCIDR: ${CLUSTER_CIDR}
hostnameOverride: ##NODE_NAME##
mode: "ipvs"
portRange: ""
kubeProxyIPTablesConfiguration:
masqueradeAll: false
kubeProxyIPVSConfiguration:
scheduler: rr
excludeCIDRs: []
EOF for (( i=0; i < 4; i++ ))
do
echo ">>> ${NODE_NAMES[i]}"
sed -e "s/##NODE_NAME##/${NODE_NAMES[i]}/" -e "s/##NODE_IP##/${NODE_IPS[i]}/" kube-proxy-config.yaml.template > kube-proxy-config-${NODE_NAMES[i]}.yaml.template
scp kube-proxy-config-${NODE_NAMES[i]}.yaml.template root@${NODE_NAMES[i]}:/etc/kubernetes/kube-proxy-config.yaml
done

配置详解

创建启动文件并分发

#!/bin/bash

cd /data/k8s/work
source /data/k8s/bin/env.sh cat > kube-proxy.service <<EOF
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=${K8S_DIR}/kube-proxy
ExecStart=/data/k8s/bin/kube-proxy \\
--config=/etc/kubernetes/kube-proxy-config.yaml \\
--master=https://api.k8s.vip:8443
--logtostderr=true \\
--v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF for node_name in ${NODE_NAMES[@]}
do
echo ">>> ${node_name}"
scp kube-proxy.service root@${node_name}:/etc/systemd/system/
done

启动服务

#!/bin/bash

cd /data/k8s/work
source /data/k8s/bin/env.sh for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "mkdir -p ${K8S_DIR}/kube-proxy"
ssh root@${node_ip} "systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy"
done

服务检查

#!/bin/bash

cd /data/k8s/work
source /data/k8s/bin/env.sh for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl status kube-proxy|grep -i active"
done 检查结果:
>>> 192.168.16.104
Active: active (running) since Sun 2019-12-29 23:00:26 CST; 1 months 5 days ago
>>> 192.168.16.105
Active: active (running) since Sun 2019-12-29 23:00:27 CST; 1 months 5 days ago
>>> 192.168.16.106
Active: active (running) since Sun 2019-12-29 23:00:27 CST; 1 months 5 days ago
>>> 192.168.16.107
Active: active (running) since Sun 2019-12-29 23:00:28 CST; 1 months 5 days ago

总结

kube-proxy组件安装相对简单,这里只要知道kube-proxy是什么,了解其工作机制,它有哪些负载均衡模式,如何为service提供服务,kube-proxy又是如何关联到后端pod等,这里提供了非安全端口10249,安全端口10256。

14. 第十三篇 二进制安装kube-proxy的相关教程结束。

《14. 第十三篇 二进制安装kube-proxy.doc》

下载本文的Word格式文档,以方便收藏与打印。