Client-Go
Table of Contents
“In-Cluster” Development Environment on Mac
개요
- 활용 방법
import (
"k8s.io/client-go/rest"
)
...
rest.InClusterConfig()
- 필요 항목
- 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
- token 파일(
구축 방법
- token과 certificate 파일을 만들기 위해 serviceaccount(incluster-sa) 과 secret(incluster-sa-token) 생성
$ kubectl create serviceaccount incluster-sa -n kube-public
$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: incluster-sa-token
namespace: kube-public
annotations:
kubernetes.io/service-account.name: incluster-sa
type: kubernetes.io/service-account-token
EOF
- 생성한 serviceaccount(incluster-sa) 에
cluster-admin
권한 부여
$ kubectl create clusterrolebinding incluster-binding --clusterrole=cluster-admin --serviceaccount=kube-public:incluster-sa
- secret(incluster-sa-token) 에서
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
,/var/run/secrets/kubernetes.io/serviceaccount/token
파일 생성
$ sudo mkdir -p /var/run/secrets/kubernetes.io/serviceaccount
$ kubectl get secret incluster-sa-token -n kube-public -o jsonpath='{.data.ca\.crt}' | base64 --decode | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
$ kubectl get secret incluster-sa-token -n kube-public -o jsonpath='{.data.token}' | base64 --decode | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/token
- kubeconfig 의 current-context 에서
KUBERNETES_SERVICE_HOST
,KUBERNETES_SERVICE_PORT
환경변수 정의
$ CLUSTER="$(kubectl config view --raw=true -o jsonpath="{.contexts[?(@.name==\"$(kubectl config current-context)\")].context.cluster}")"
$ export KUBERNETES_SERVICE_HOST=$(kubectl config view --raw=true -o jsonpath="{.clusters[?(@.name==\"$CLUSTER\")].cluster.server}" | awk -F/ '{print $3}' | awk -F: '{print $1}')
$ export KUBERNETES_SERVICE_PORT=$(kubectl config view --raw=true -o jsonpath="{.clusters[?(@.name==\"$CLUSTER\")].cluster.server}" | awk -F/ '{print $3}' | awk -F: '{print $2}')
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