天天看點

k8s之kube-proxy部署安裝

作者:HemLeen哈哈
k8s之kube-proxy部署安裝

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節點才可以加入叢集。

繼續閱讀