手動建立 k8s kubeconfig 文件以實現多環境切換

一、集羣環境中如何配置kubectl (有集羣登陸權限)

要實現 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文件

這個 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

三、生成 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 就能夠拿到集羣的信息了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

二、將指定文件目錄的方式轉成單kube config文件方式訪問

第一種配置方法,須要建立存放證書的目錄,並將證書 cp 到該目錄下,這種方式不適合移植和通用化,不少時候,kubectl 客戶端其實只須要一個配置文件便可。這裏說一個場景,好比公司某個成員想使用 k8s 環境,但咱們又不但願給他 密碼以登陸到集羣中來使用,咱們只須要讓他在本身的電腦上下載 kubectl 這個 client, 並給他一個配置文件 便可,那麼如何製做這樣一個配置文件?又如何使用呢?操作系統

一、下載kubectl

kubectl 的版本有不少,也有各類操做系統版本的 kubectl,只須要到官網下載和咱們 k8s 集羣私適配的版本便可。.net

二、修改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

三、配置 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

相關文章
相關標籤/搜索