当前位置: 首页 > news >正文

【云原生 · Kubernetes】部署 kube-proxy 组件

个人名片:
因为云计算成为了监控工程师👨🏻‍💻
个人博客🏆:念舒_C.ying
CSDN主页✏️:念舒_C.ying

kube-proxy 运行在所有 worker 节点上,它监听 apiserver 中 service 和 endpoint 的变化情况,创建路由规则以提供服务 IP 和负载均衡功能。
讲解部署 ipvs 模式的 kube-proxy 过程。
注意:如果没有特殊指明,所有操作均在 qist 节点上执行,然后远程分发文件和执行命令。

15.1 创建 kube-proxy 证书

创建证书签名请求:

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
  • CN:指定该证书的 User 为 system:kube-proxy ;
  • 预定义的 RoleBinding system:node-proxier 将User system:kube-proxy 与 Role system:nodeproxier绑定,该 Role 授予了调用 kube-apiserver Proxy 相关 API 的权限;
  • 该证书只会被 kube-proxy 当做client 证书使用,所以 hosts 字段为空;

生成证书和私钥:

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*

15.2 创建和分发 kubeconfig 文件

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

15.3 创建 kube-proxy 配置文件

从 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
  • bindAddress : 监听地址; --hostname-override=k8s-master-1
    clientConnection.kubeconfig : 连接 apiserver 的 kubeconfig 文件;
  • clusterCIDR : kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定
    –cluster-cidr 或–masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT;
  • hostnameOverride : 参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node,从而不会创建任何 ipvs 规则;
  • mode : 使用 ipvs 模式;

15.4 创建和分发 kube-proxy systemd unit 文件

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/

15.5 启动 kube-proxy 服务

所有节点执行

# 全局刷新service
systemctl daemon-reload
# 设置kubelet开机启动
systemctl enable kubelet
#重启kubelet
systemctl restart kubelet

15.6 检查启动结果

所有节点执行

systemctl status kube-proxy|grep Active

确保状态为 active (running) ,否则查看日志,确认原因:

journalctl -u kube-proxy

15.7 查看监听端口

[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

15.8 查看 ipvs 路由规则

任意节点执行

/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(一)

相关文章:

  • 腾讯99公益日-券券松鼠❤
  • Vue动态路由配置
  • 基于小波变换的EMG信号病人数据matlab仿真分析
  • 接口的详解
  • 52.【Java 数据结构——线性表】
  • 离子液体[C7MIm]TfS 1-庚基-3-甲基咪唑三氟甲磺酸盐 齐岳bio
  • 人脸识别9-FastDeploy人脸检测、识别、部署
  • 【Unity】Unity常用类:向量Vector3、四元数Quaternion
  • 《MongoDB入门教程》第12篇 查询结果排序
  • 最新版SpringBoot整合Mybatis,实现增删改查(CRUD)
  • Nacos的API居然存在这么严重的漏洞
  • PTA初级题目练习
  • 图书管理系统(SpringBoot+SpringMVC+Mybatis)
  • 对话MySQL之父:一个优秀程序员可抵5个普通程序员
  • 猿创征文|【C++实战小项目】通讯录(一) 纯数组实现基本通讯录模拟详解
  • 分享一款快速APP功能测试工具
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • Android Volley源码解析
  • Asm.js的简单介绍
  • CSS 三角实现
  • CSS盒模型深入
  • gitlab-ci配置详解(一)
  • leetcode-27. Remove Element
  • Mocha测试初探
  • Tornado学习笔记(1)
  • 百度地图API标注+时间轴组件
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 对象引论
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端设计模式
  • 深入 Nginx 之配置篇
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 收藏好这篇,别再只说“数据劫持”了
  • 思考 CSS 架构
  • 算法之不定期更新(一)(2018-04-12)
  • 微信小程序填坑清单
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • $forceUpdate()函数
  • (07)Hive——窗口函数详解
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)ssm码农论坛 毕业设计 231126
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (算法)前K大的和
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • .gitattributes 文件
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net framework4与其client profile版本的区别