~/.kube/config
apiVersion: v1
kind: Config
preferences: {}
clusters:
- name: cluster.local
cluster:
certificate-authority-data: LS0tLS1...
server: https://127.0.0.1:6443
- name: mycluster
cluster:
server: https://1.2.3.4:6443
users:
- name: myadmin
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1...
client-key-data: LS0tLS1...
contexts:
- context:
cluster: mycluster
user: myadmin
name: myadmin@mycluster
- context:
cluster: cluster.local
user: kubernetes-admin
name: kubernetes-admin@cluster.local
current-context: kubernetes-admin@cluster.local
kubectl config view
view
를 통해서도 내용을 확인할수 있으며 이 때는인증정보
는 가려진다.
kubectl config get-clusters
kubectl config get-contexts
kubectl config get-users
이렇게 클러스터 사용자를 변경할 수 있다. 이후에 해당 사용자에 역할을 부여해서 특정 활동만 가능하게 만든다.
여기서 사용자와 주소를 알 수 있다.
kubectl config use-context myadmin@mycluster
관리자 권한으로 Powershell 열고
choco install kubernetes-cli --version=1.22.4
y
kubectl
해당 파일내용을 다 복사해서
mkdir ~/.kube
code .config
### 이곳에 붙여넣고
kubectl get nodes
### 이렇게 외부에서 인증을 통해 접근이 가능하다.
쿠버네티스의 사용자
인증 방법:
Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269
The suggested pronunciation of JWT is the same as the English word "jot".
https://jwt.io/
The suggested pronunciation of JWT is the same as the English word "jot".
해당 페이지에
이 인증 정보를 base64 디코딩한 후 집어넣으면
이렇게json
형식의 설정값들을 확인할 수 있다
참고자료 |
---|
https://kubernetes.io/docs/reference/access-authn-authz/rbac/ |
https://kubernetes.io/ko/docs/reference/access-authn-authz/authorization/ |
요청 동사 (HTTP방식을 사용한다.)
ClusterRole
kubectl create sa <NAME>
Private Key
openssl genrsa -out myuser.key 2048
x509 인증서 요청 생성
openssl req -new -key myuser.key -out myuser.csr -subj "/CN=myuser"
cat myuser.csr | base64 | tr -d "\n"
### -tr은 트림이고 \n을 다 잘라낸다는 뜻임
csr.yaml
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: myuser-csr
spec:
usages:
- client auth
signerName: kubernetes.io/kube-apiserver-client
request: LS0tLS1CRUdJTiB
kubectl create -f csr.yaml
kubectl get csr
상태: Pending
kubectl certificate approve myuser-csr
kubectl get csr
상태: Approved, Issued
kubectl get csr myuser-csr -o yaml
status.certificates
kubectl get csr myuser-csr -o jsonpath='{.status.certificate}' | base64 -d > myuser.crt
### 자체서명이아닌 CertificateSigningRequest에 의해 서명을 받을 수 있다.
### 그리고 서명받은 인증서를 myuser.crt로 만들었다.
인증서를 볼 수 있다..
Issuer
발급자
Subject
발급대상
그 밑에가공개키
..
Kubeconfig 사용자 생성
kubectl config set-credentials myuser --client-certificate=myuser.crt --client-key=myuser.key --embed-certs=true
### --embed 옵션을 통해 나중에 디렉토리 구조가 바뀌더라도 문제없도록
### 파일로 인증서를 가리키지않고 바로 그 값을 내장하게된다.
Kubeconfig 컨텍스트 생성
kubectl config set-context myuser@cluster.local --cluster=cluster.local --user=myuser --namespace=default
kubectl config get-users
kubectl config get-clusters
kubectl config get-contexts
kubectl config use-context myuser@cluster.local
context를 바꿔서 get pods가 안된다.
role을 생성해서 바인딩시켜주어야 하기 때문이다.
kubectl config use-context kubernetes-admin@cluster.local
### 다시 원래 context로 돌아와야 이후 작업이 가능하다.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: myuser-view-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: myuser