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과 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