k8s kube-proxy
kube-proxy是管理Service的访问入口,包括集群内Pod到Service的访问和集群外访问service。 kube-proxy管理Sevice的Endpoints,该Service对外暴露一个Virtual IP,也成为Cluster IP,集群内通过访问这个Cluster IP:Port就能访问到集群内对应的Serivce下的Pod。 Service是通过Selector选择的一组Pods的服务抽象,其实就是一个微服务,提供了服务的LB和反向代理的能力,而kube-proxy的主要作用就是负责Service的实现。 Service另外一个重要作用是,一个服务后端的Pods可能会随着生存灭亡而发生IP的改变,Service的出现,给服务提供了一个固定的IP,而无视后端Endpoint的变化。
下面开始部署kube-proxy
#kube-proxy也在kubernetes-server-linux-amd64.tar.gz包内
#把里面的kube-proxy复制到k8s安装目录
cp kubernetes/server/bin/kube-proxy /opt/kubernetes/bin/
修改kube-proxy的配置
#这个把配置提出到单独的配置文件内了/opt/kubernetes/conf/kube-proxy-config.yml
cat >/opt/kubernetes/conf/kube-proxy.conf << EOF
KUBE_PROXY_OPTS="--v=2 \
--config=/opt/kubernetes/conf/kube-proxy-config.yml"
EOF
#提出的配置文件
cat >/opt/kubernetes/conf/kube-proxy-config.yml<<EOF
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
address: 0.0.0.0
metricsBindAddress: 0.0.0.0:10249
clientConnection:
kubeconfig: /opt/kubernetes/conf/kube-proxy.kubeconfig
clusterCIDR: 10.0.0.0/24
mode: ipvs
ipvs:
scheduler: "rr"
iptables:
masqueradeAll: true
EOF
#这个配置文件里有个kube-proxy.kubeconfig,要生成一下这个文件
生成kube-proxy证书,worker node上使用的证书
# 生成kube-proxy证书请求文件
kube-proxy-csr.json
{
"CN": "system:kube-proxy",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
#使用现有的CA私钥,生成kube-proxy证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json|cfssljson -bare kube-proxy
#生成好会得到下面几个文件
ll kube-proxy*
-rw-r--r--. 1 root root 1009 11月 23 17:44 kube-proxy.csr
-rw-r--r--. 1 root root 201 11月 23 17:44 kube-proxy-csr.json
-rw-------. 1 root root 1679 11月 23 17:44 kube-proxy-key.pem
-rw-r--r--. 1 root root 1391 11月 23 17:44 kube-proxy.pem
生成kube-proxy.kubeconfig配置
利用上面kube-proxy证书,生成kube-proxy.kubeconfig配置
#设置集群参数
kubectl config set-cluster kubernetes --server=https://192.168.56.101:6443 --certificate-authority=/opt/kubernetes/ssl/ca.pem --embed-certs=true --kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig
#设置客户端认证参数
kubectl config set-credentials kube-proxy --client-certificate=/opt/kubernetes/ssl/kube-proxy.pem --embed-certs=true --client-key=/opt/kubernetes/ssl/kube-proxy-key.pem --kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig
#设置上下文参数
kubectl config set-context default --cluster=kubernetes --user=kube-proxy --kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig
#设置默认上下文
kubectl config use-context default --kubeconfig=/opt/kubernetes/conf/kube-proxy.kubeconfig
配置kube-proxy.service为系统服务,开机自启
cat >/usr/lib/systemd/system/kube-proxy.service<<EOF
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=/opt/kubernetes/conf/kube-proxy.conf
ExecStart=/opt/kubernete
s/bin/kube-proxy \$KUBE_PROXY_OPTS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start kube-proxy
systemctl enable kube-proxy
kube-proxy部署好之后,下一篇安装CNI网络。这些安装好后node节点才可以加入集群。