k 8 s sslクラスタの導入実践3:kubectlコマンドツール行の導入
6450 ワード
参照ドキュメント:https://github.com/opsnull/follow-me-install-kubernetes-cluster作者の無私な分かち合いに感謝します.クラスタ環境の構築に成功しました.記事は、導入中に発生したエラーと詳細な操作手順の記録です.比較参考が必要な場合は、順番に読んでテストしてください.
3.1 kubectlバイナリファイルのダウンロードと配布
すべてのノードに配布される/opt/k 8 s/binは、実行権限があることを確認します.
3.2 admin証明書と秘密鍵の作成
kubectlはapiserver httpsセキュリティポートと通信し、apiserverは提供された証明書を認証し、許可します.kubectlはクラスタの管理ツールとして、最高権限を付与する必要があります.ここでは、最高の権限を持つadmin証明書を作成します.
証明書署名リクエストの作成
Oはシステム:masters、kube-apiserverはこの証明書を受け取った後に要求したGroupをシステム:mastersに設定する.事前定義されたClusterRoleBinding cluster-adminはGroupsystem:mastersをRole cluster-adminにバインドし、このRoleはすべてのAPIの権限を付与する.この証明書はkubectlがclient証明書としてのみ使用されるため、hostsフィールドは空です.
証明書と秘密鍵の生成:
kubeconfigファイルを作成kubeconfigはkubectlのプロファイルであり、apiserverアドレス、CA証明書、および自身が使用する証明書など、apiserverにアクセスするすべての情報を含む.
--certificate-authority:kube-apiserver証明書のルート証明書を検証します.--Client-certificate、--client-key:生成されたadmin証明書と秘密鍵で、kube-apiserverに接続するときに使用されます.--Embed-certs=true:ca.pemとadmin.pem証明書の内容は生成されたkubectlに埋め込まれる.kubeconfigファイル(追加しない場合、証明書ファイルのパスが書き込まれます).
配布kubeconfigファイルはユーザの~/.kube/configファイル
名前を改める
3.3注意:kubectlのデフォルトは~/.kube/configファイルはkube-apiserverアドレス、証明書、ユーザー名などの情報を読み出す.kube/configという名前はこれでなければなりません.名前が間違っていたり、パスが間違っていたりすると、エラーが発生する可能性があります.
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?