배치k8sssl 집단 실천 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/k8s/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 관리자 인증서 및 개인 키 만들기
kubectl은apiserverhttps 보안 포트와 통신하고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는 시스템:마스터스,kube-apiserver는 이 인증서를 받은 후 요청한 그룹을 시스템:마스터스로 설정합니다.미리 정의된ClusterRoleBinding cluster-admin은 Group system: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에 접근하는 모든 정보, 예를 들어apiserver 주소,CA 인증서와 자신이 사용하는 인증서를 포함합니다.
[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?

좋은 웹페이지 즐겨찾기