个人名片:
因为云计算成为了监控工程师‍
个人博客:念舒_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. 如何用 refcursor 返回结果集

    可以通过返回 Refcursor 类型的函数,或者out 类型的函数或 procedure 返回结果集. 一.返回refcursor 类型的函数 create or replace function ...

  2. 数据库基础操作-part2

    单表和多表查询 单表查询 记录详细操作: 增 insert into t1(字段1, 字段2, 字段3) values (值1, 值2, 值3), (值1, 值2, 值3), (值1, 值2, 值3) ...

  3. 部署Netlify站点博客

    Netlify站点部署静态博客 今天尝试把站点部署在Netlify上,因为部署在GitHub Pages上,国内访问速度太慢了,所以就尝试一下别的站点,部署成功之后发现速度还是不太行,后边继续找找原因 ...

  4. Beats:使用Elastic Stack对Redis监控

  5. Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 三)

  6. Elasticsearch:mapping定制

  7. 连接FastDFS出现超时问题的解决办法

    1.使用Java语言写的web项目,jeecg框架连接FastDFS,需要修改的信息如下: # WEB-INF/classes/fdfs_client.conf connect_timeout=300 ...

  8. PAT (Basic Level) Practice 1019 数字黑洞 分数 20

    给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有" ...

  9. LeetCode - 统计数组中的元素

    1. 统计数组中元素总结 1.1 统计元素出现的次数 为了统计元素出现的次数,我们肯定需要一个map来记录每个数组以及对应数字出现的频次.这里map的选择比较有讲究: 如果数据的范围有限制,如:只有小 ...

  10. 云原生下基于K8S声明式GitOps持续部署工具ArgoCD实战-上

    @ 目录 概述 定义 工作原理 主要组件 核心概念 环境准备 概述 安装Kubekey 创建K8S 安装K9S OpenLB 安装ArgoCD 安装 ArgoCD CLI 从Git库中创建一个应用程序 ...