Kubernetes (쿠버네티스)

Kubernetes Pod와 API 통신 - Ambassador

jw92 2022. 10. 3. 22:59

파드 내에서 API가 통신해야할 일이 있다.

이 때, 인증 등 복잡한 절차를 거쳐야 하는 경우가 많은데,

쉽게 사용할 수 있는 방법인 Ambassador가 있다.

 

local에서 사용할 수 있는 kubectl proxy 명령어를 이용하여 localhost:8001로 kubernetes와 통신해본 적이 있을 것이다.

이를 응용한 방법이다.

main container외에 kubectl proxy를 사용하는 것이다.

 

kubectl-proxy.sh

#!/bin/sh

API_SERVER="https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT"
CA_CRT="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
TOKEN="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"

/kubectl proxy --server="$API_SERVER" --certificate-authority="$CA_CRT" --token="$TOKEN" --accept-paths='^.*'

 

Dockerfile

FROM alpine
RUN apk update && apk add curl && curl -L -O https://dl.k8s.io/v1.8.0/kubernetes-client-linux-amd64.tar.gz && tar zvxf kubernetes-client-linux-amd64.tar.gz kubernetes/client/bin/kubectl && mv kubernetes/client/bin/kubectl / && rm -rf kubernetes && rm -f kubernetes-client-linux-amd64.tar.gz
ADD kubectl-proxy.sh /kubectl-proxy.sh
ENTRYPOINT /kubectl-proxy.sh

 

이렇게 하면 예를 들어 아래와 같은 yaml 파일로 ambassador container를 포함한 pod를 만들 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-ambassador
spec:
  containers:
  - name: main
    image: ubuntu:latest
  - name: ambassador
    image: kubectl-proxy

 

접속을 테스트하기 위해서는

kubectl exec -it pod-with-ambassador -c main -- bash

로 Container에 접속한 뒤

curl localhost:8001 명령어를 수행하면 된다.

 

이 때, main의 localhost로 ambassador의 localhost:8001이 수행되는 이유는 pod가 루프백을 포함한 동일한 네트워크 인터페이스를 공유하기 때문이다.

 

 

만약 Ambassador를 사용하지 않는 상태에서 특정 프로그래밍 언어를 사용할 때, 통신을 원한다면 아래 사이트를 참고

Python: https://github.com/kubernetes-incubator/client-python/ 

 

GitHub - kubernetes-client/python: Official Python client library for kubernetes

Official Python client library for kubernetes. Contribute to kubernetes-client/python development by creating an account on GitHub.

github.com

Java: https://github.com/fabric8io/kubernetes-client 

 

GitHub - fabric8io/kubernetes-client: Java client for Kubernetes & OpenShift

Java client for Kubernetes & OpenShift . Contribute to fabric8io/kubernetes-client development by creating an account on GitHub.

github.com

 

'Kubernetes (쿠버네티스)' 카테고리의 다른 글

쿠버네티스의 구성요소  (0) 2021.04.15