k 8 s sslクラスタの導入実践3:kubectlコマンドツール行の導入


参照ドキュメント:https://github.com/opsnull/follow-me-install-kubernetes-cluster作者の無私な分かち合いに感謝します.クラスタ環境の構築に成功しました.記事は、導入中に発生したエラーと詳細な操作手順の記録です.比較参考が必要な場合は、順番に読んでテストしてください.
3.1 kubectlバイナリファイルのダウンロードと配布
[root@k8s-master kubernetes]# wget https://dl.k8s.io/v1.10.4/kubernetes-client-linux-amd64.tar.gz
--2018-08-20 14:24:47--  https://dl.k8s.io/v1.10.4/kubernetes-client-linux-amd64.tar.gz
  dl.k8s.io (dl.k8s.io)... 23.236.58.218
  dl.k8s.io (dl.k8s.io)|23.236.58.218|:443...  。
  HTTP  , ... 302 Moved Temporarily
 :https://storage.googleapis.com/kubernetes-release/release/v1.10.4/kubernetes-client-linux-amd64.tar.gz [  URL]
--2018-08-20 14:24:48--  https://storage.googleapis.com/kubernetes-release/release/v1.10.4/kubernetes-client-linux-amd64.tar.gz
  storage.googleapis.com (storage.googleapis.com)... 216.58.221.144, 2404:6800:4005:808::2010
  storage.googleapis.com (storage.googleapis.com)|216.58.221.144|:443...  。
  HTTP  , ... 200 OK
 :13353257 (13M) [application/x-tar]
 : “kubernetes-client-linux-amd64.tar.gz”

100%[==============================================================================>] 13,353,257  10.3MB/s   1.2s  

2018-08-20 14:24:50 (10.3 MB/s) -   “kubernetes-client-linux-amd64.tar.gz” [13353257/13353257])
[root@k8s-master kubernetes]# tar -zxvf kubernetes-client-linux-amd64.tar.gz
kubernetes/
kubernetes/client/
kubernetes/client/bin/
kubernetes/client/bin/kubectl
[root@k8s-master kubernetes]#

すべてのノードに配布される/opt/k 8 s/binは、実行権限があることを確認します.
[root@k8s-master kubernetes]# cp kubernetes/client/bin/kubectl /opt/k8s/bin/
[root@k8s-master kubernetes]# chmod +x /opt/k8s/bin
[root@k8s-master kubernetes]# scp kubernetes/client/bin/kubectl root@k8s-node1:/opt/k8s/bin/
kubectl                                                                               100%   52MB  82.9MB/s   00:00   
[root@k8s-master kubernetes]# scp kubernetes/client/bin/kubectl root@k8s-node2:/opt/k8s/bin/
kubectl                                                                               100%   52MB  91.6MB/s   00:00   
[root@k8s-master kubernetes]#

3.2 admin証明書と秘密鍵の作成
kubectlはapiserver httpsセキュリティポートと通信し、apiserverは提供された証明書を認証し、許可します.kubectlはクラスタの管理ツールとして、最高権限を付与する必要があります.ここでは、最高の権限を持つadmin証明書を作成します.
証明書署名リクエストの作成
[root@k8s-master admin]# cat admin-csr.json
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "SZ",
"L": "SZ",
"O": "system:masters",
"OU": "4Paradigm"
}
]
}
[root@k8s-master admin]#

Oはシステム:masters、kube-apiserverはこの証明書を受け取った後に要求したGroupをシステム:mastersに設定する.事前定義されたClusterRoleBinding cluster-adminはGroupsystem:mastersをRole cluster-adminにバインドし、このRoleはすべてのAPIの権限を付与する.この証明書はkubectlがclient証明書としてのみ使用されるため、hostsフィールドは空です.
証明書と秘密鍵の生成:
/root/k8s/kubernetes/kubernetes/key/admin
[root@k8s-master admin]# cfssl gencert -ca=/etc/kubernetes/cert/ca.pem -ca-key=/etc/kubernetes/cert/ca-key.pem -config=/etc/kubernetes/cert/ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
2018/08/20 14:45:10 [INFO] generate received request
2018/08/20 14:45:10 [INFO] received CSR
2018/08/20 14:45:10 [INFO] generating key: rsa-2048
2018/08/20 14:45:10 [INFO] encoded CSR
2018/08/20 14:45:10 [INFO] signed certificate with serial number 428475884414304130599120601246945000507451954346
2018/08/20 14:45:10 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
[root@k8s-master admin]# ls
admin.csr  admin-csr.json  admin-key.pem  admin.pem

kubeconfigファイルを作成kubeconfigはkubectlのプロファイルであり、apiserverアドレス、CA証明書、および自身が使用する証明書など、apiserverにアクセスするすべての情報を含む.
[root@k8s-master admin]# source /opt/k8s/bin/environment.sh
#  
[root@k8s-master admin]# kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/cert/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kubectl.kubeconfig
# 
[root@k8s-master admin]# kubectl config set-credentials admin --client-certificate=admin.pem --client-key=admin-key.pem --embed-certs=true --kubeconfig=kubectl.kubeconfig
# 
[root@k8s-master admin]# kubectl config set-context kubernetes --cluster=kubernetes --user=admin --kubeconfig=kubectl.kubeconfig
# 
[root@k8s-master admin]# kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
Switched to context "kubernetes".
[root@k8s-master admin]#

--certificate-authority:kube-apiserver証明書のルート証明書を検証します.--Client-certificate、--client-key:生成されたadmin証明書と秘密鍵で、kube-apiserverに接続するときに使用されます.--Embed-certs=true:ca.pemとadmin.pem証明書の内容は生成されたkubectlに埋め込まれる.kubeconfigファイル(追加しない場合、証明書ファイルのパスが書き込まれます).
配布kubeconfigファイルはユーザの~/.kube/configファイル
[root@k8s-master admin]# ls
admin.csr  admin-csr.json  admin-key.pem  admin.pem  kubectl.kubeconfig
[root@k8s-master admin]# cp kubectl.kubeconfig ~/.kube
[root@k8s-master admin]# cd
[root@k8s-master ~]# ls -a
.   anaconda-ks.cfg  .bash_logout   .bashrc  .config  environment.sh  .kube  .ssh
..  .bash_history    .bash_profile  .cache   .cshrc   k8s             .pki   .tcshrc
[root@k8s-master ~]# cd .kube/
[root@k8s-master .kube]# ls
kubectl.kubeconfig

名前を改める
[root@k8s-master ~]# cd .kube/
[root@k8s-master .kube]# ls
kubectl.kubeconfig
[root@k8s-master .kube]# mv kubectl.kubeconfig config
[root@k8s-master .kube]# ll
  8
-rw------- 1 root root 6212 8   20 15:08 config

[root@k8s-master ~]#  scp .kube/config root@k8s-node2:/root/.kube/
config                                                                                          100% 6212     6.6MB/s   00:00   
[root@k8s-master ~]#  scp .kube/config root@k8s-node1:/root/.kube/
config          

3.3注意:kubectlのデフォルトは~/.kube/configファイルはkube-apiserverアドレス、証明書、ユーザー名などの情報を読み出す.kube/configという名前はこれでなければなりません.名前が間違っていたり、パスが間違っていたりすると、エラーが発生する可能性があります.
$ kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?