要实现 kubectl get no 这种以不多命令参数的方式获取到 k8s 集群信息,下面介绍一种方法,这种方法通常是面向运维人员,有集群登陆权限。还能够实施到部署k8s集群时,方便每一个节点上执行访问。macos
k8s_env.sh
文件,填写以下相关环境配置变量,并放到 /etc/profile.d
目录下,source 后,使其生效。为何要放到这个目录下?由于在执行命令时, bash 会默认检查这个目录,根据这个目录下的配置去访问系统。api
[appuser@k8s-master-1 ~]$ cat /etc/profile.d/k8s_env.sh # for kubectlbash
export KUBERNETES_MASTER='10.130.14.155:443'app
export KUBECONFIG='/etc/kubernetes/kubeconfig'运维
这个 kubeconfig 文件定义了集群和客户端信息,包括https认证等,固然也能够采用 insecure-skip-tls-verify: true
来替换 certificate-authority: /etc/kubernetes/ssl/ca.crt
以跳过集群验证。
通常参考以下:ide
-[appuser@k8s-master-1 ~]$ cat /etc/kubernetes/kubeconfig apiVersion: v1 kind: Config clusters: - name: shjq-dev01-chenqiang-cluster cluster: server: https://10.130.14.155:443 certificate-authority: /etc/kubernetes/ssl/ca.crt users: - name: shjq-dev01-chenqiang-user user: client-certificate: /etc/kubernetes/ssl/cs_client.crt client-key: /etc/kubernetes/ssl/cs_client.key contexts: - context: cluster: shjq-dev01-chenqiang-cluster user: shjq-dev01-chenqiang-user name: shjq-dev01-chenqiang123456789101112131415161718
当里集群设置了 https 访问时,请按照k8s官网手册,生成以下证书,并放入到 /etc/kubernetes/ssl/
下。编码
[appuser@k8s-master-1 ~]$ ll /etc/kubernetes/ssl/ total 60-rw-r--r-- 1 root root 2009 May 22 15:20 ca.crt -rw-r--r-- 1 root root 3268 May 22 15:20 ca.key -rw-r--r-- 1 root root 17 May 22 15:20 ca.srl -rwxr-xr-x 1 root root 702 May 22 15:20 create-master-crt -rw-r--r-- 1 root root 1452 May 22 15:20 cs_client.crt -rw-r--r-- 1 root root 907 May 22 15:20 cs_client.csr -rw-r--r-- 1 root root 1679 May 22 15:20 cs_client.key -rw-r--r-- 1 root root 9450 May 22 15:20 master_ssl.cnf -rw-r--r-- 1 root root 2029 May 22 15:20 server.crt -rw-r--r-- 1 root root 1846 May 22 15:20 server.csr -rw-r--r-- 1 root root 3268 May 22 15:20 server.key -rw-r--r-- 1 root root 5297 May 22 15:20 server.pem1234567891011121314
以后,进入到 k8s 节点中,不须要指定 kubeconfig file,也不须要用 -s
指定 apiserver ,直接使用 kubectl 就能够拿到集群的信息了spa
-[appuser@k8s-master-1 ~]$ kubectl get no NAME STATUS ROLES AGE VERSION10.130.14.67 Ready <none> 15d v1.9.310.130.14.68 Ready <none> 70d v1.9.310.130.14.73 Ready <none> 70d v1.9.312345
第一种配置方法,须要建立存放证书的目录,并将证书 cp 到该目录下,这种方式不适合移植和通用化,不少时候,kubectl 客户端其实只须要一个配置文件便可。这里说一个场景,好比公司某个成员想使用 k8s 环境,但咱们又不但愿给他 密码以登陆到集群中来使用,咱们只须要让他在本身的电脑上下载 kubectl 这个 client, 并给他一个配置文件 便可,那么如何制做这样一个配置文件?又如何使用呢?操作系统
kubectl 的版本有不少,也有各类操做系统版本的 kubectl,只须要到官网下载和咱们 k8s 集群私适配的版本便可。.net
以下这个配置文件源于方法一
-[appuser@k8s-master-1 ~]$ cat /etc/kubernetes/kubeconfig apiVersion: v1 kind: Config clusters: - name: shjq-dev01-chenqiang-cluster cluster: server: https://10.130.14.155:443 certificate-authority: /etc/kubernetes/ssl/ca.crt users: - name: shjq-dev01-chenqiang-user user: client-certificate: /etc/kubernetes/ssl/cs_client.crt client-key: /etc/kubernetes/ssl/cs_client.key contexts: - context: cluster: shjq-dev01-chenqiang-cluster user: shjq-dev01-chenqiang-user name: shjq-dev01-chenqiang123456789101112131415161718
咱们要配置成单个 kubeconfig 配置文件,咱们须要作以下操做:
- 修改 certificate-authority
成 certificate-authority-data
- 修改 client-certificate
成 client-certificate-data
- 修改 client-key
成 client-key-data
- 对 /etc/kubernetes/ssl/ca.crt, cs_client.crt, cs_client.key
进行 base64
编码,分别执行 /etc/kubernetes/ssl/ca.crt|base64
等。
通过上述步骤,咱们获得相似以下文件:
apiVersion: v1 clusters:- cluster: certificate-authority-data: XXXXXXXX name: shjq-dev01-chenqiang-clustercontexts:- context: cluster: shjq-dev01-chenqiang-cluster user: shjq-dev01-chenqiang-user name: shjq-dev01-chenqiangcurrent-context: shjq-dev01-chenqiangkind: Config preferences: {} users:- name: shjq-dev01-chenqiang-user user: client-certificate-data: XXXXXXXXXXXXX client-key-data: XXXXXXXXXX
建立 $HOME/.kube/
目录,并将上述获得的 kubeconfig 文件命名成 config,放于该目录下。
并在 ~/.bash_profile
中添加以下配置以导出该环境变量:
export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config1
这样咱们就能在客户端,无需登陆 k8s 集群的方式来访问了,我在 macos 下访问以下:
chenqiang@Johnny ~$ kubectl config use-context shjq-dev01-chenqiang Switched to context "shjq-dev01-chenqiang". chenqiang@Johnny ~$ kubectl get no NAME STATUS ROLES AGE VERSION 10.130.14.67 Ready <none> 15d v1.9.3 10.130.14.68 Ready <none> 70d v1.9.3 10.130.14.73 Ready <none> 70d v1.9.3
咱们也能够经过 kubectl config view
来查看该文件的配置。细心的你会进入 ~/.kube
看看发生了什么,
发现生成了 cache
及 http_cache
两个文件夹,
chenqiang@Johnny ~$ cd ~/.kube/ chenqiang@Johnny .kube$ ll total 16drwxr-xr-x 4 chenqiang staff 128 May 24 18:26 cache -rw-r--r--@ 1 chenqiang staff 7296 May 24 18:25 config drwxr-xr-x 31 chenqiang staff 992 May 24 18:25 http-cache123456
具体步骤与第二步相同,主要是添加相应的user和cluster便可。使用 use-context 来进行切换,大概相似:
chenqiang@Johnny ~$ kubectl config use-context shjq-uat01 Switched to context "shjq-uat01". chenqiang@Johnny ~$ kubectl get no NAME STATUS ROLES AGE VERSION 10.130.247.31 Ready <none> 16d v1.9.3 10.130.248.8 Ready <none> 3d v1.9.3 10.130.33.11 Ready <none> 41d v1.9.3 10.130.33.12 Ready <none> 41d v1.9.3 10.130.33.13 Ready <none> 41d v1.9.3 10.130.33.8 Ready <none> 41d v1.9.3 chenqiang@Johnny ~$ kubectl config use-context shjq-dev01-chenqiang Switched to context "shjq-dev01-chenqiang". chenqiang@Johnny ~$ kubectl get no NAME STATUS ROLES AGE VERSION 10.130.14.67 Ready <none> 16d v1.9.3 10.130.14.68 Ready <none> 70d v1.9.3 10.130.14.73 Ready <none> 70d v1.9.3
下面给出多集群的 kubeconfig 参考配置。
apiVersion: v1 clusters:- cluster: certificate-authority-data: XXXXXXXXXXXXXXXXXXXXXX name: shjq-dev01-chenqiang-cluster- cluster: certificate-authority-data: XXXXXXXXXXXXXXXXXX server: https://10.130.33.254:443 name: shjq-uat01-clustercontexts:- context: cluster: shjq-dev01-chenqiang-cluster user: shjq-dev01-chenqiang-user name: shjq-dev01-chenqiang- context: cluster: shjq-uat01-cluster user: shjq-uat01-user name: shjq-uat01current-context: shjq-dev01-chenqiangkind: Config preferences: {} users:- name: shjq-dev01-chenqiang-user user: client-certificate-data: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX client-key-data: XXXXXXXXXXXXXXXX
本文出自https://blog.csdn.net/qianggezhishen/article/details/80441132
参考连接https://blog.csdn.net/ChaITSimpleLove/article/details/110210961