1、集群环境中如何配置kubectl (有集群登录权限)

要实现 kubectl get no 这种以很少命令参数的方式获取到 k8s 集群信息,下面介绍一种方法,这种方法一般是面向运维人员,有集群登录权限。还可以实施到部署k8s集群时,方便每个节点上执行访问。

1、首先创建 k8s_env.sh 文件,填写如下相关环境配置变量,并放到 /etc/profile.d 目录下,source 后,使其生效。

为什么要放到这个目录下?因为在执行命令时, bash 会默认检查这个目录,根据这个目录下的配置去访问系统。

[appuser@k8s-master-1 ~]$ cat /etc/profile.d/k8s_env.sh # for kubectl

export KUBERNETES_MASTER='10.130.14.155:443'

export KUBECONFIG='/etc/kubernetes/kubeconfig'


2、编写kubeconfig文件

这个 kubeconfig 文件定义了集群和客户端信息,包括https认证等,当然也可以采用 insecure-skip-tls-verify: true 来替换 certificate-authority: /etc/kubernetes/ssl/ca.crt 以跳过集群验证。
一般参考如下:

-[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

3、生成 kubeconfig 中指定的那些配置文件

当里集群设置了 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 就可以拿到集群的信息了

-[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
2、将指定文件目录的方式转成单kube config文件方式访问

第一种配置方法,需要创建存放证书的目录,并将证书 cp 到该目录下,这种方式不适合移植和通用化,很多时候,kubectl 客户端其实只需要一个配置文件即可。这里说一个场景,比如公司某个成员想使用 k8s 环境,但我们又不希望给他 密码以登录到集群中来使用,我们只需要让他在自己的电脑上下载 kubectl 这个 client, 并给他一个配置文件 即可,那么如何制作这样一个配置文件?又如何使用呢?

1、下载kubectl

kubectl 的版本有很多,也有各种操作系统版本的 kubectl,只需要到官网下载和我们 k8s 集群私适配的版本即可。

2、修改config文件的文段

如下这个配置文件源于方法一

-[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

3、配置 KUBECONFIG 环境变量

创建 $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
如何在多个集群间切换kubectl?

具体步骤与第二步相同,主要是添加相应的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