因为部署的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