签发证书
证书签发在 k8s-5-141 服务器操作 操作
[root@k8s-5-141 ~]# cd /opt/certs/kube-cert
[root@k8s-5-141 kube-cert]# vim kube-proxy-csr.json # CN 其实是k8s中的角色
{
"CN": "system:kube-proxy",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"O": "batar",
"OU": "batar-zhonggu",
"L": "ShenZhen",
"ST": "GuangDong",
"C": "CN"
}
]
}
[root@k8s-5-141 kube-cert]# cfssl gencert -ca=../ca.pem -ca-key=../ca-key.pem -config=../etcd-ca/ca-config.json -profile=client kube-proxy-csr.json |cfssl-json -bare kube-proxy-client
2021/03/26 15:01:41 [INFO] generate received request
2021/03/26 15:01:41 [INFO] received CSR
2021/03/26 15:01:41 [INFO] generating key: rsa-2048
2021/03/26 15:01:41 [INFO] encoded CSR
2021/03/26 15:01:41 [INFO] signed certificate with serial number 325696708048092303352380142387745383055352409220
2021/03/26 15:01:41 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
# 因为kube-proxy使用的用户是kube-proxy,不能使用client证书,必须要重新签发自己的证书
[root@k8s-5-141 kube-cert]# ll kube-proxy-c* -l
-rw-r--r-- 1 root root 1025 Mar 26 15:01 kube-proxy-client.csr
-rw------- 1 root root 1675 Mar 26 15:01 kube-proxy-client-key.pem
-rw-r--r-- 1 root root 1419 Mar 26 15:01 kube-proxy-client.pem
-rw-r--r-- 1 root root 267 Mar 26 14:59 kube-proxy-csr.json
# 分发证书到 k8s-5-138 和 k8s-5-139 服务器上
kube-cert]# scp kube-proxy-client-key.pem kube-proxy-client.pem k8s-5-138.host.com:/opt/kubernetes/server/bin/certs/ 100% 1375 870.6KB/s 00:00
kube-cert]# scp kube-proxy-client-key.pem kube-proxy-client.pem k8s-5-139.host.com:/opt/kubernetes/server/bin/certs/
创建kube-proxy配置
在所有node节点创建,涉及服务器:k8s-5-138 ,k8s-5-139
#这里--server=https://192.168.5.137:7443 需要修改位反代的ip地址
~]# kubectl config set-cluster myk8s \
--certificate-authority=/opt/kubernetes/server/bin/certs/ca.pem \
--embed-certs=true \
--server=https://192.168.5.137:7443 \
--kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig
~]# kubectl config set-credentials kube-proxy \
--client-certificate=/opt/kubernetes/server/bin/certs/kube-proxy-client.pem \
--client-key=/opt/kubernetes/server/bin/certs/kube-proxy-client-key.pem \
--embed-certs=true \
--kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig
~]# kubectl config set-context myk8s-context \
--cluster=myk8s \
--user=kube-proxy \
--kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig
~]# kubectl config use-context myk8s-context --kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig
把生成配置文件传到另一台机器 那边就可以不用做以上四步
[root@k8s-5-138 certs]# cd /opt/kubernetes/conf
[root@k8s-5-138 conf]# scp kube-proxy.kubeconfig k8s-5-139.host.com:/opt/kubernetes/conf/
加载ipvs模块
kube-proxy 共有3种流量调度模式,分别是 namespace,iptables,ipvs,其中ipvs性能最好。
[root@hdss7-21 ~]# for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
[root@hdss7-21 ~]# lsmod | grep ip_vs # 查看ipvs模块
创建启动脚本
--hostname-override 需要修改为主机名
~]# vim /etc/systemd/system/kube-proxy.service
[Unit]
Description=kube proxy
Documentation=https://github.com/kubernetes
Conflicts=kube-proxyd
[Service]
Type=notify
Restart=always
RestartSec=5s
LimitNOFILE=40000
TimeoutStartSec=0
ExecStart=/opt/kubernetes/server/bin/kube-proxy \
--cluster-cidr 172.7.0.0/16 \
--hostname-override k8s-5-138.host.com \
--proxy-mode=ipvs \
--ipvs-scheduler=nq \
--kubeconfig /opt/kubernetes/conf/kube-proxy.kubeconfig
[Install]
WantedBy=multi-user.target
~]# mkdir -p /data/logs/kubernetes/kube-proxy
# 添加系统服务并设置自启动 , 也可以使用supervisor 工具来启动启动和拉起程序,在实验环境我就不做这个配置了
~]# systemctl daemon-reload
~]# systemctl cat kube-proxyd
~]# systemctl enable kube-proxyd
~]# systemctl start kube-proxyd
验证集群
[root@k8s-5-138 /]# yum install -y ipvsadm
[root@k8s-5-138 /]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.1:443 nq
-> 192.168.5.138:6443 Masq 1 0 0
-> 192.168.5.139:6443 Masq 1 0 0
[root@k8s-5-138 /]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 26h