签发证书
证书签发在 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-client2021/03/26 15:01:41 [INFO] generate received request2021/03/26 15:01:41 [INFO] received CSR2021/03/26 15:01:41 [INFO] generating key: rsa-20482021/03/26 15:01:41 [INFO] encoded CSR2021/03/26 15:01:41 [INFO] signed certificate with serial number 3256967080480923033523801423877453830553524092202021/03/26 15:01:41 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable forwebsites. For more information see the Baseline Requirements for the Issuance and Managementof 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:00kube-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 proxyDocumentation=https://github.com/kubernetesConflicts=kube-proxyd[Service]Type=notifyRestart=alwaysRestartSec=5sLimitNOFILE=40000TimeoutStartSec=0ExecStart=/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 -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 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 svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 192.168.0.1 <none> 443/TCP 26h
