Client-Go
Table of Contents
Kubernetes API
client-go In-cluster 테스트
import (
"k8s.io/client-go/rest"
)
...
rest.InClusterConfig()
로컬에서 in-cluster 개발 테스트
- token 파일(
/var/run/secrets/kubernetes.io/serviceaccount/token
) - certificate 파일 (
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
) -
api-server 환경변수
KUBERNETES_SERVICE_HOST
,KUBERNETES_SERVICE_PORT
- 특정 service account 에서 TOKEN, CA 조회
▒ NAMESPACE="kore"
▒ SA="kore-board"
▒ SECRET="$(kubectl get sa ${SA} -n kore -o jsonpath="{.secrets..name}")"
▒ TOKEN="$(kubectl get secrets ${SECRET} -n ${NAMESPACE} -o jsonpath="{.data.token}"|base64 --decode)"
▒ CA="$(kubectl get secrets ${SECRET} -n ${NAMESPACE} -o jsonpath="{.data.ca\.crt}"|base64 --decode)"
cvl
- token, ca.crt, 파일 지정 , KUBERNETES_SERVICE_HOST, KUBERNETES_SERVICE_PORT 환경변수 지정
▒ CLUSTER="?(@.name==\"minikube\")" # or "0", "1" ....
▒ sudo mkdir -p /var/run/secrets/kubernetes.io/serviceaccount/
▒ echo -n "${TOKEN}" | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/token
▒ echo -n "${CA}" | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
▒ export KUBERNETES_SERVICE_HOST=$(kubectl config view --raw=true -o jsonpath="{.clusters[${CLUSTER}].cluster.server}" | awk -F/ '{print $3}' | awk -F: '{print $1}')
▒ export KUBERNETES_SERVICE_PORT=$(kubectl config view --raw=true -o jsonpath="{.clusters[${CLUSTER}].cluster.server}" | awk -F/ '{print $3}' | awk -F: '{print $2}')
- default service account 에서 TOKEN, CA 조회하는 경우
▒ TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 --decode)
▒ CA=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.ca\.crt}"|base64 --decode)
필요시 권한 부여
User “system:serviceaccount:default:default” cannot get resource “configmaps” in API group “” in the namespace “default”
- 예 - default namespace 의 default serviceaccount 에
cluster-admin
cluster-role 를 지정
$ kubeclt apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: crb-default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: default
namespace: default
EOF
Kubernetes Downward API
컨테이너에서 실행 중인 애플리케이션의 속성을 환경변수로 전달
- https://sgc109.github.io/2021/01/17/k8s-downward-api/
Kubectl 콘솔 프린트
- kubectl 콘솔 프린트 주요 로직
- https://github.com/kubernetes/kubernetes/blob/master/pkg/printers/internalversion/printers.go
- 예 : printPod
posted at 2022/03/18 09:42