운영자 PC에 Kubernetes 환경 설정
1.1. kubectl 설치 (Mac 기준)
1
| iMacPro:~$ brew install kubectl
|
1.2. Control Plane에 개발용 인증서 생성 (optional)
1
2
| ubuntu@cplane:/etc/kubernetes/pki$ sudo openssl genrsa -out domain.com.ca.key 2048
ubuntu@cplane:/etc/kubernetes/pki$ sudo openssl req -x509 -new -nodes -key ./domain.com.ca.key -subj "/CN=domain.com" -addext "subjectAltName = DNS:domain.com,DNS:domain.com.default,DNS:domain.com.default.svc,DNS:domain.com.default.svc.cluster.local,DNS:cplane,IP:10.96.0.1,IP:172.31.x.x" -out domain.com.ca.crt
|
1.3. Control Plane에 클러스터 등록 (optional)
apiserver.crt 인증서를 사용하는 이유는, 클러스터와 통신한다는 것이 결국 apiserver와 통신을 의미하기때문이다. 따라서 apiserver의 인증서를 사용한다.
이 인증서를 위에서 만든 개발용 인증서로 사용하고 싶다면, kube-apiserver.yaml에서 -tls-cert-file과 -tls-private-key-file 옵션을 변경해줘야한다.
1
| ubuntu@cplane:~$ k config set-cluster domain.com --server https://172.x.x.x:6443 --embed-certs --certificate-authority=/etc/kubernetes/pki/domain.com.ca.crt
|
1.4. 운영자 PC 호스트파일 변경
API Server의 인증서를 별도로 바꾸지 않고, 기본적으로 생성된 인증서(apiserver.crt)를 사용할 경우, Control Plane에서 apiserver.crt(/etc/kubernetes/pki/)를 다운로드 받은 후, 아래 명령으로 정보 확인. kubernetes API Server의 인증서로 kubernetes를 호스트로 요청 시에만 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
| iMacPro:~$ openssl x509 -in ./apiserver.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
...
Issuer: CN = kubernetes
...
X509v3 extensions:
...
X509v3 Subject Alternative Name:
DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:cplane, IP Address:10.96.0.1, IP Address:172.x.x.x
Signature Algorithm: sha256WithRSAEncryption
...
|
아래와 같이 운영자 PC의 호스트 파일에 kubernetes를 아래와 같이 등록하여 사용하면 된다.
1
2
3
4
| /etc/hosts
...
13.x.x.x kubernetes
...
|
1.5. 운영자 PC에 클러스터 등록
1
| iMacPro:~$ k config set-cluster domain.com --server https://kubernetes:6443 --embed-certs --certificate-authority=./apiserver.crt
|
개발자(운영) 계정 추가
운영자 계정으로, Dev,Stg,Prod Namespace에서 동시에 사용할 예정
2.1. 개발자 계정 인증서 생성
1
2
3
4
5
| ubuntu@cplane:~/domain$ openssl genrsa -out domain-ops.key 2048
ubuntu@cplane:~/domain$ openssl req -new -key domain-ops.key -out domain-ops.csr
...
Common Name (e.g. server FQDN or YOUR name) []:**domain-ops**
...
|
2.2. CSR 생성
1
2
3
4
5
6
7
8
9
10
11
| ubuntu@cplane:~/domain$ cat ./domain-ops.yaml
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: domain-ops
spec:
request: LS0tLS1CRU... # cat ./domain-ops.csr | base64 | tr -d "\n"
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
ubuntu@cplane:~/domain$ k apply -f ./domain-ops.yaml
|
2.3. CSR 승인
1
2
3
4
5
6
7
| ubuntu@cplane:~/domain$ k get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
domain-ops 5s kubernetes.io/kube-apiserver-client kubernetes-admin <none> **Pending**
ubuntu@cplane:~/domain$ k certificate approve domain-ops
ubuntu@cplane:~/domain$ k get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
domain-ops 2m34s kubernetes.io/kube-apiserver-client kubernetes-admin <none> **Approved,Issued**
|
2.4. 인증서 추출
1
| ubuntu@cplane:~/domain$ k get csr domain-ops -o jsonpath='{.status.certificate}' | base64 -d > domain-ops.crt
|
2.5. 개발자 계정 kubeconfig에 등록
1
| ubuntu@cplane:~/domain$ k config set-credentials domain-ops --client-key ./domain-ops.key --client-certificate ./domain-ops.crt --embed-certs=true
|
2.6. 운영자PC에 개발자 계정 등록. 위에서 만든 사용자 키, 인증서는 서버로부터 다운로드 받아온다.
1
| iMacPro:~$ k config set-credentials domain-ops --client-key ./domain-ops.key --client-certificate ./domain-ops.crt --embed-certs=true
|
2.7. 운영자PC에 컨텍스트 생성
1
| iMacPro:~$ k config set-context domain-ops@domain.com --cluster domain.com --user domain-ops
|
운영자 PC에 최종. 추가된 클러스터, 사용자, 컨텍스트 정보
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| iMacPro:~$ k config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://kubernetes:6443
name: domain.com
...
contexts:
...
- context:
cluster: domain.com
user: domain-ops
name: domain-ops@domain.com
current-context: domain-ops@domain.com
kind: Config
preferences: {}
users:
...
- name: domain-ops
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
|
개발자(운영) 계정 RBAC 추가
3.1. 개발자(운영)에게 필요한 role 확인
우선, 모든 권한을 부여해주자.
1
| ubuntu@cplane:~$ k create clusterrolebinding domain-ops --clusterrole cluster-admin --user domain-ops
|
클러스터, 리소스별 권한은 차차 부여하기로 한다.