因为部署的jenkins和k8s不在同一台服务器,且不能ssh过去,运维朋友告诉我,可以把配置文件移动过去,在安装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两个端口:
最后,拷贝连接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做一些恶意的操作,整个集群可能就挂了,即使有这个端口也是监听在本地,也就是只能这台机器去连接。
现在知道了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这个文件是通过kubectl config指令生成的
在上面部分是配置集群的,即要连接的k8s集群主节点IP是多少,并且里面包含了相关证书。
Context指定上下文,和指定当前使用哪个上下文。
在配置文件当中可能会存在多个集群,现在只有一个集群是我刚刚搭建的。你再搭建一个集群是可以将两个配置文件进行合并,两个配置文件合并在一个配置文件里面。合并在一起就可以使用这一个配置文件去切换着连接两个不通的集群,切换的操作实际上就是指定上下文的操作。(上下文引用了集群信息,和客户端信息)
两个文件合并为一个文件,这个得修改要不冲突
name: kubernetes 修改为 name: kubernetes1 users: - name: kubernetes-admin 修改为 kubernetes-admin1
name: kubernetes-admin1@kubernetes1 这样就切换到另外一个集群了,最后是客户端的认证,即客户端以什么身份连接过来的,上下文就是资源的关联。
参考:Kubernetes kubeconfig配置文件详细解读_小楼一夜听春雨,深巷明朝卖杏花-CSDN博客_kubeconfig