因為部署的jenkins和k8s不在同一台服務器,且不能ssh過去,運維朋友告訴我,可以把配置文件移動過去,在安裝kubectl就能執行了,下面就簡單描述一下原因。
在node節點上可以執行kubectl命令嗎?
localhost:8080 這個端口是k8s api(kube-apiserver非安全端口)的端口,在master上面可以執行成功其實走的是配置文件。但是在node上連接的是本地的非安全端口。
其實還有一個對外端口是6443,這個是kube-apiserver監聽的,masterip:6443安全端口
[root@k8s-master ~]# netstat -tpln | grep 6443
tcp6 0 0 :::6443 :::* LISTEN 9261/kube-apiserver
[root@k8s-master ~]#
什么叫安全端口,什么叫非安全端口
kube-apiserver兩個端口:
- localhost:8080 非安全端口(不需要認證,沒有加入認證機制),是kubectl默認先連接8080,如果你配置kubeconfig(.kube/config)就直接走這個配置連接的安全端口(在master上沒有8080端口,走的是kubeconfig)
- masterip:6443 安全端口 ,提供了內部授權的機制,比如登入網站想要輸入用戶名密碼才能登入。
kubeadm安裝的默認禁用了8080端口,二進制安裝默認是啟用的,他們兩個區別在於有沒有加入身份認證,即鑒權。這個文件在這個目錄下面,在root家目錄下面。這個配之文件是在安裝最后一步拷貝過來.
最后,拷貝連接k8s集群的認證文件到默認路徑下
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
可以看到讀取到的是該配置文件
*關閉8080端口就是希望你使用配置文件去連接安全端口,*這樣是安全的,非安全端口是絕對不能對外提供服務的,如果對外提供服務別人掃描到你api做一些惡意的操作,整個集群可能就掛了,即使有這個端口也是監聽在本地,也就是只能這台機器去連接。
讓Node使用kubectl命令
現在知道了kubectl怎么連接集群和管理集群,它是通過kubeconfig這個文件連接過去的。這個文件到底是怎么樣生成的呢?
[root@k8s-master .kube]# scp /root/.kube/config root@192.168.1.151:/root
root@192.168.1.151's password:
config 100% 5453 3.7MB/s 00:00
[root@k8s-master .kube]#
kubeconfig生成與文件結構
kubeconfig這個文件是通過kubectl config指令生成的
在上面部分是配置集群的,即要連接的k8s集群主節點IP是多少,並且里面包含了相關證書。
Context指定上下文,和指定當前使用哪個上下文。
在配置文件當中可能會存在多個集群,現在只有一個集群是我剛剛搭建的。你再搭建一個集群是可以將兩個配置文件進行合並,兩個配置文件合並在一個配置文件里面。合並在一起就可以使用這一個配置文件去切換着連接兩個不通的集群,切換的操作實際上就是指定上下文的操作。(上下文引用了集群信息,和客戶端信息)
兩個文件合並為一個文件,這個得修改要不沖突
name: kubernetes 修改為 name: kubernetes1
users:
- name: kubernetes-admin 修改為 kubernetes-admin1
name: kubernetes-admin1@kubernetes1 這樣就切換到另外一個集群了,最后是客戶端的認證,即客戶端以什么身份連接過來的,上下文就是資源的關聯。
參考:Kubernetes kubeconfig配置文件詳細解讀_小樓一夜聽春雨,深巷明朝賣杏花-CSDN博客_kubeconfig