파드 내에서 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/
Java: https://github.com/fabric8io/kubernetes-client
'Kubernetes (쿠버네티스)' 카테고리의 다른 글
쿠버네티스의 구성요소 (0) | 2021.04.15 |
---|