K8S-Demo集群实践10:部署ipvs模式的kube-proxy组件

K8S-Demo集群实践10:部署ipvs模式的kube-proxy组件

  • 一、创建和分发kube-proxy的kubeconfig文件
  • 二、创建kube-proxy参数配置文件
    • 1、创建模板文件kube-proxy-config.yaml.template
    • 2、创建和分发kube-proxy参数配置文件
  • 三、创建kube-proxy systemd unit并分发部署
  • 四、启动并验证各Node节点上的kube-proxy服务
  • 附:K8s-Demo集群版本信息
  • 附:专栏链接

  • kube-proxy运行在所有worker节点上,它监听apiserver中service和endpoint的变化情况,创建路由规则以提供服务IP和负载均衡功能

一、创建和分发kube-proxy的kubeconfig文件

[root@master1 ~]# cd /opt/install/kubeconfig
[root@master1 kubeconfig]# kubectl config set-cluster k8s-demo \
  --certificate-authority=/opt/install/cert/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=kube-proxy.kubeconfig

[root@master1 kubeconfig]# kubectl config set-credentials k8s-demo-kube-proxy \
  --client-certificate=/opt/install/cert/kube-proxy.pem \
  --client-key=/opt/install/cert/kube-proxy-key.pem \
  --embed-certs=true \
  --kubeconfig=kube-proxy.kubeconfig

[root@master1 kubeconfig]# kubectl config set-context default \
  --cluster=k8s-demo \
  --user=k8s-demo-kube-proxy \
  --kubeconfig=kube-proxy.kubeconfig
[root@master1 kubeconfig]# for node_name in ${NODE_NAMES[@]}
  do
    echo ">>> ${node_name}"
    scp kube-proxy.kubeconfig root@${node_name}:/opt/k8s/etc/
  done

二、创建kube-proxy参数配置文件

1、创建模板文件kube-proxy-config.yaml.template

[root@master1 kubeconfig]# cat > kube-proxy-config.yaml.template <
  • hostnameOverride:参数值必须与kubelet的值一致,否则kube-proxy启动后会找不到该Node,从而不会创建任何ipvs规则
  • clusterCIDR:kube-proxy根据–cluster-cidr判断集群内部和外部流量,指定–cluster-cidr或–masquerade-all选项后kube-proxy才会对访问Service IP的请求做SNAT

2、创建和分发kube-proxy参数配置文件

[root@master1 ~]# cd /opt/install/kubeconfig
[root@master1 kubeconfig]# for (( i=0; i < 6; i++ ))
  do 
    echo ">>> ${ALL_NAMES[i]}"
    sed -e "s/##ALL_NAME##/${ALL_NAMES[i]}/" -e "s/##NODE_IP##/${ALL_IPS[i]}/" kube-proxy-config.yaml.template > kube-proxy-config-${ALL_NAMES[i]}.yaml.template
    scp kube-proxy-config-${ALL_NAMES[i]}.yaml.template root@${ALL_NAMES[i]}:/etc/kubernetes/kube-proxy-config.yaml
  done

三、创建kube-proxy systemd unit并分发部署

[root@master1 ~]# cd /opt/install/service
[root@master1 service]# cat > kube-proxy.service <>> ${node_name}"
    scp kube-proxy.service root@${node_name}:/etc/systemd/system/
  done

四、启动并验证各Node节点上的kube-proxy服务

  • 创建授权信息,kube-proxy.pem证书中的CN为k8s-demo-kube-proxy
[root@master1 ~]# kubectl create clusterrolebinding k8s-demo-cluster-proxy-binding --clusterrole=system:node-proxier  --user=k8s-demo-kube-proxy
  • 启动kube-proxy服务
[root@master1 ~]# for node_ip in ${ALL_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "modprobe ip_vs_rr"
    ssh root@${node_ip} "systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy"
  done
  • 查看kube-proxy服务状态和端口信息
[root@master1 ~]# for node_ip in ${ALL_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "systemctl status kube-proxy|grep Active"
    ssh root@${node_ip} "ss -lnpt | grep kube-proxy"
  done
  • 如果状态不是active (running),则要查看日志确认原因:
[root@node1 ~]# journalctl -u kube-proxy
  • 查看ipvs路由规则
[root@master1 ~]# for node_ip in ${ALL_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "/usr/sbin/ipvsadm -ln"
  done

附:K8s-Demo集群版本信息

组件 版本 命令
kubernetes 1.18.5 kubectl version
docker-ce 19.03.11 docker version 或者 rpm -qa | grep docker
etcd 3.4.3 etcdctl version
calico 3.13.3 calico -v
coredns 1.7.0 coredns -version

附:专栏链接

K8S-Demo集群实践00:搭建镜像仓库Harbor+安全扫描
K8S-Demo集群实践01:准备VMware虚拟机模板
K8S-Demo集群实践02:准备VMware虚拟机3台Master+3台Node
K8S-Demo集群实践03:准备集群各组件间HTTPS通讯需要的x509证书
K8S-Demo集群实践04:部署etcd三节点高可用集群
K8S-Demo集群实践05:安装kubectl并配置集群管理员账户
K8S-Demo集群实践06:部署kube-apiserver到master节点(3个无状态实例)
K8S-Demo集群实践07:kube-apiserver高可用方案
K8S-Demo集群实践08:部署高可用kube-controller-manager集群
K8S-Demo集群实践09:部署高可用kube-scheduler集群
K8S-Demo集群实践10:部署ipvs模式的kube-proxy组件
K8S-Demo集群实践11:部署ipvs模式的kube-kubelet组件
K8S-Demo集群实践12:部署Calico网络
K8S-Demo集群实践13:部署集群CoreDNS
K8S-Demo集群实践14:部署集群监控服务Metrics Server
K8S-Demo集群实践15:部署Kubernetes Dashboard
K8S-Demo集群实践16:部署Kube-Prometheus
K8S-Demo集群实践17:部署私有云盘owncloud(10.6版本)
K8S-Demo集群实践18:构建宇宙中第一个基础容器镜像


  • 先用起来,通过操作实践认识k8s,积累多了自然就理解了
  • 把理解的知识分享出来,自造福田,自得福缘
  • 追求简单,容易使人理解,知识的上下文也是知识的一部分,例如版本,时间等
  • 欢迎留言交流,也可以提出问题,一般在周末回复和完善文档
  • [email protected] 2021-1-21

你可能感兴趣的:(k8s-demo,kubernetes,k8s)