Kube-api server certificate file 확인
cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep -i tls-cert-file
Kube-api server의 ETCD client 측 certificate file 확인
cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep -i etcd-certfile
Kube-api server의 Kublet client 측 key 확인
cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep -i kubelet
ETCD server의 certificate file 확인
cat /etc/kubernetes/manifests/etcd.yaml | grep -i cert-file
ETCD server의 Root certificate file 확인
cat /etc/kubernetes/manifests/etcd.yaml | grep -i trusted-ca-file
ETCD server의 Root certificate file 확인
cat /etc/kubernetes/manifests/etcd.yaml | grep -i trusted-ca-file
Kube-api server Certificate Common Name 확인
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text | grep -i Subject
ETCD server Certificate Common Name 확인
openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -text
openssl genrsa -out test.key 2048
oppenssl req -new -key test.key -subj "/CN=test" -out test.csr
cat test.csr | base64 | tr -d "\n"
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: akshay
spec:
groups:
- system:authenticated
request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFV(중략...) - base 64인코딩 필요
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
kubectl apply -f 파일명.yaml
kubectl get csr
kubectl get csr test -o yaml
// echo TEXT | base64 --decode ~ certificate 디코딩
kubectl certificate approve csr명
kubectl certificate deny csr명
kubectl delete csr csr명
(1) Clusters : dev, Prod, test등의 멀티 클러스트
(2) Users : 클러스터에 접근하는 User로 각각 다른 권한 소유
(3) Contexts : 어떤 User가 특정 Cluster에 접근할 건지 정의
// config File 조회
kubectl config view
// default config File외 조회
kubectl config view --kubeconfig CONFIG파일명
// 현재 context 설정 조회
kubectl config --kubeconfig=PATH current-context
ex) kubectl config --kubeconfig=/root/my-kube-config current-context
// context 스위칭
kubectl config --kubeconfig=PATH use-context CONTEXT명
ex) kubectl config --kubeconfig=/root/my-kube-config use-context research
// default config 변경
cp 변경할 CONFIG 파일 ~/.kube/config
ex) cp /root/my-kube-config ~/.kube/config
API Groups
// authorization mode 확인
kubectl describe pod kube-apiserver-controlplane -n kube-system | grep -i authorization
// Role 생성
kubectl create role Role명 --namespace=Namespace명 --verb=권한 --resource=resource명
ex) kubectl create role developer --namespace=default --verb=list,create,delete --resource=pods
// RoleBinding 생성
kubectl create rolebinding RoleBinding명 --namespace=Namespace명 --role=Role명 --user=User명
ex) kubectl create rolebinding dev-user-binding --namespace=default --role=developer --user=dev-user
(1) role definition file 생성
Role 생성
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: developer
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["list", "create","delete"]
RoleBinding 생성
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dev-user-binding
subjects:
- kind: User
name: dev-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer
apiGroup: rbac.authorization.k8s.io
(2) user-role binding
(3) view RBAC
kubectl get roles
kubectl get roles --all-namespaces // 모든 네임스페이스 role 조회
kubectl get rolebindings
kubectl describe role role명 // role 상세정보
kubectl describe role role명 -n namespace명
kubectl describe rolebinding rolebinding명 // role binding 상세정보
kubectl describe rolebinding rolebinding명 -n namespace명
kubectl edit role Role명 -n Namespace명 // role 수정
(4) Check Access
kubectl auth can-i create deployments // 접속한 유저가 create deploy 권한있는지 체크
kubectl auth can-i create deployments --as dev-user // dev-user가 create deploy 권한있는지 체크
kubectl auth can-i create deployments --as dev-user --namespace namespace명 // dev-user가 해당 namespace에서 create deploy 권한있는지 체크
kubectl get clusterroles // clusterRole 조회
kubectl get clusterroles --no-headers | wc -l // 갯수 조회
kubectl get clusterrolebindings // clusterRoleBindings 조회
ClusterRole & ClusterRoleBinding 생성
// Node
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: node-admin
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "watch", "list", "create", "delete"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: michelle-binding
subjects:
- kind: User
name: michelle
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: node-admin
apiGroup: rbac.authorization.k8s.io
// Storage
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: storage-admin
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "watch", "list", "create", "delete"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "watch", "list", "create", "delete"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: michelle-storage-admin
subjects:
- kind: User
name: michelle
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: storage-admin
apiGroup: rbac.authorization.k8s.io
service account는 애플리케이션과 쿠버네티스 클러스터간의 상호작용 시 사용
ex) kube API server에 요청을 보내는 애플리케이션의 경우 service account 필요
애플리케이션이 쿠버네티스 내에서 운영되면 자동으로 default service account가 해당 POD에 마운트 되므로 수동으로 설정할 필요 없음
// service account 생성
kubectl create serviceaccount SERVICEACCOUNT명
// service account 조회
kubectl get serviceaccounts
// Pod이 어떤 service account 사용하고 있는지 조회
kubectl get pod -o yaml
// mount된 credential path 조회
kubectl describe pod POD명 ~ Mounts 참조
// service account 상세정보 조회
kubectl describe serviceaccount SERVICEACCOUNT명
// Tokens에 secret Object 정보를 알 수 있고, 아래 명령어로 상세 정보 조회
kubectl describe secret SECRETOBJECT명
// 도커 레포 SECRET 생성
kubectl create secret docker-registry SECRET명
--docker-username=USERNAME
--docker-password=PASSWORD
--docker-server=PRIVATEREPO
--docker-email=EMAIL
(1) Ingress : 해당 POD으로 들어오는 요청에 대한 규칙, ingress 요청 수락 시 응답은 자동적으로 허락 ex) API server => DB Server
(2) Egress : 해당 POD에서 다른 POD으로 데이터 전달 ex) DB server => Backup Server
// network policy 조회
kubectl get netpol
// network policy type조회
kubectl describe netpol NETPOL명
Network Policy에 연결된 POD 조회
kubectl get netpol // 조회 후, Selector를 토대로 POD labes 조회
kubectl get po --show-labels