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

网友投稿 1088 2022-10-08

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

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

01写在之前

本文是二进制安装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/目录中即可。

02创建kubeconfig配置文件并分发

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

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

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

#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shcat > kube-proxy-config.yaml.template <>> ${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.yamldone

配置详解

配置选项选项说明
clientConnection与kube-apiserver交互时的参数设置
  burst: 200临时允许该事件记录值超过qps设定值
  kubeconfigkube-proxy 客户端连接 kube-apiserver 的 kubeconfig 文件路径设置
  qps: 100与kube-apiserver交互时的QPS,默认值5
bindAddresskube-proxy监听地址
healthzBindAddress用于检查服务的IP地址和端口,默认:0.0.0.0:10256
metricsBindAddressmetrics服务的ip地址和端口,默认:127.0.0.1:10249
enableProfiling如果设为true,则通过/debug/pprof处理程序上的web界面进行概要分析
clusterCIDRkube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT
hostnameOverride参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node,从而不会创建任何 ipvs 规则;
mode使用 ipvs 模式
portRange主机端口的范围(beginPort- endport,单端口或beginPort+偏移量),可用于代理服务流量。如果(未指定,0,或0-0)端口将被随机选择
kubeProxyIPTablesConfiguration:
  masqueradeAll: false如果使用纯iptables代理,SNAT所有通过服务集群ip发送的通信
kubeProxyIPVSConfiguration:
  scheduler: rr当proxy为ipvs模式时,ipvs调度类型
  excludeCIDRs: []

04创建启动文件并分发

这里的几个参数很简单,就不对其进行说明了。

#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shcat > kube-proxy.service <>> ${node_name}"    scp kube-proxy.service root@${node_name}:/etc/systemd/system/done

05启动服务

#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shfor 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

06服务检查

#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shfor 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

07总结

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

分享使我快乐

往期文章

通俗易懂理解Kubernetes核心组件及原理

Centos7.6内核升级

第一篇  k8s组件版本及功能简介

第二篇  环境初始化准备

第三篇  PKI基础概念、cfssl工具介绍及kubernetes中证书

第四篇  Etcd存储组件高可用部署

第五篇  安装keepalived与Nginx

第六篇  二进制安装 kube-apiserver

第七篇 验证kube-apiserver及kubeconfig配置详解

第八篇  kube-controller-manager安装及验证

第九篇  kube-scheduler 安装及验证

第十篇  网络组件flanneld安装及使用

第十一篇  安装docker引擎

第十二篇  二进制安装kubelet

上一篇:警惕!四层、七层负载乱用,Java lettuce连接池故障一例
下一篇:linux中条件变量和信号量有什么区别
相关文章

 发表评论

暂时没有评论,来抢沙发吧~