个人名片:
因为云计算成为了监控工程师‍
个人博客:念舒_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(一)

【云原生 · Kubernetes】部署 kube-proxy 组件的更多相关文章

  1. 系列文章:云原生Kubernetes日志落地方案

    在Logging这块做了几年,最近1年来越来越多的同学来咨询如何为Kubernetes构建一个日志系统或者是来求助在这过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是想把我们这些年积累的经验以 ...

  2. [云原生]Kubernetes - 集群搭建(第2章)

    目录 一.前置知识点 二.kubeadm部署方式介绍 三.安装要求 四.最终目标 五.准备环境 六.环境初始化 6.1 设置系统主机名以及Hosts文件的相互解析 6.2 安装依赖文件(所有节点) 6 ...

  3. kubernetes部署 flannel网络组件

    创建 flannel 证书和私钥flannel 从 etcd 集群存取网段分配信息,而 etcd 集群启用了双向 x509 证书认证,所以需要为 flanneld 生成证书和私钥. cat > ...

  4. SpringCloud怎么迈向云原生?

    很多公司由于历史原因,都会有自研的RPC框架. 尤其是在2015-2017期间,Spring Cloud刚刚面世,Dubbo停止维护多年,很多公司在设计自己的RPC框架时,都会基于Spring Clo ...

  5. 干货 | 京东云原生容器—SpringCloud实践(一)

    "云原生"成为近年热词并不是一种偶然,它不是一个软件,也不是一种框架,而是一堆理念集合,以及围绕这些理念所产生的一些最佳实践的工具.云原生天然就是作用于服务架构的,可以视作一个服务 ...

  6. 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考

    理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年.2008 年左右,Hadoop 成 ...

  7. 云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇

    项目初探 项目地址: 原项目:https://github.com/lonng/nanoserver 调过的:https://github.com/Kirk-Wang/nanoserver 这将是一个 ...

  8. 从Kubernetes到“云原生全家桶”,网易如何让业务部署提效280%?

    近日,网易云轻舟微服务团队接受了CNCF的采访,分享了网易云在云原生领域尤其是Kubernetes方面的实践经验.以下为案例全文:公司:网易地点:中国杭州行业:互联网技术 挑战它的游戏业务是世界上最大 ...

  9. 干货 | 京东云托管Kubernetes集成镜像仓库并部署原生DashBoard

    在上一篇"Cloud Native 实操系列"文章中,我们为大家介绍了如何通过京东云原生容器实现Eureka的部署(

  10. Longhorn 企业级云原生容器存储解决方案-部署篇

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 安装 Longhorn 可以通过多种方式安装 ...

随机推荐

  1. helm安装metrics-server-3.8.2

    Application version 0.6.1 Chart version 3.8.2 获取chart包 helm repo add metrics-server https://kubernet ...

  2. Mac隔空投送功能

    使用mac 或iphone 的隔空投送功能可以互发文件,亲测可用 具体可以看mac的文档 需要注意的是: 如果是mac传iphone,iphone会显示你需要存储文件的地方,比如选择在文稿中.然后在文 ...

  3. Web 开发相关概念

    Web 开发相关概念 前端 后端 全栈 前端 Front-end:网站中用户看到的部分 HTML CSS JavaScript 库和框架 设计工具 后端 Back-end:网站中用户看不到的部分 编程 ...

  4. 官方文档----ProxySQL 1.4.2 现在支持原生集群!!!

    官方文档地址:https://proxysql.com/blog/proxysql-cluster/ 前言 ProxySQL 是一个去中心化的代理,建议靠近应用部署.这种方法甚至可以很好地扩展到数百个 ...

  5. Docker网络详解——原理篇

    安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络). none .host 网络模式 简介 Host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP ...

  6. MySQL学习(3)---MySQL常用命令

    ps:此随笔基于mysql 5.7.*版本. 准备 net start mysql 启动MySQL服务 net stop mysql 关闭MySQL服务 mysql [-h<IP地址>] ...

  7. 线程池底层原理详解与源码分析(补充部分---ScheduledThreadPoolExecutor类分析)

    [1]前言 本篇幅是对 线程池底层原理详解与源码分析  的补充,默认你已经看完了上一篇对ThreadPoolExecutor类有了足够的了解. [2]ScheduledThreadPoolExecut ...

  8. Educational Codeforces Round 106 (Rated for Div. 2)

    就ac了2题... A题一开始题意模模糊糊的似懂非懂,然后自己按样例推出了题意,简单题很容易ac了.还是自己的英语水平太菜了.... B题根据0和1的位置关系能看出来,因为0不能在1后面, 所以有00 ...

  9. esp-idf 移植 lvgl8.3.3

    一.准备材料 开发板:esp32s3 idf版本:4.4.2 lvgl:8.3.3 注意:lvgl不要选择master分支,编译失败时不好确定问题. 二.创建idf项目 方式一 通过 VSCode 创 ...

  10. python基础作业2

    目录 编写一个用户认证装饰器 利用有参装饰器编写多种用户登录校验策略 利用递归函数依次打印列表中每一个数据值 获取用户权限并校验用户登录 编写一个用户认证装饰器 """ ...