По моему мнению, у вас есть 2 варианта здесь:
Как предложено в предыдущем ответе, с использованием клиентской библиотеки.
Использование посла шаблон контейнера: посольские контейнеры прокси локальное соединение с миром, вы можете прочитать об этом шаблоне подробнее здесь .
Как это решит вашу проблему:
Вместо того, чтобы разговаривать с сервером API напрямую из вашего модуля (как вы бы использовали kubectl
), вы можете запустить kubectl proxy
в контейнере посла после основного контейнера и обмениваться данными с сервером API через it.
Вместо того, чтобы напрямую общаться с сервером API, приложение в главном контейнере может подключаться к послу через HTTP (вместо HTTPS) и позволить прокси-серверу посла обрабатывать HTTPS-соединение с сервером API, принимая заботиться о безопасности прозрачно. Это делается с помощью файлов из секретного тома токена по умолчанию (см. Сценарий ниже).
Поскольку все контейнеры в модуле используют один и тот же петлевой сетевой интерфейс, ваше приложение может получить доступ к прокси-серверу через порт на локальном хосте. .
Как построить такой контейнер?
Dockerfile (использует v1.8):
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
Где 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='^.*'
Все, что вам остается сделать - это создать этот образ (pu sh в реестре), добавить его в качестве контейнера в модуль приложения и напрямую общаться с ним через обратную связь.
По умолчанию прокси-сервер kubectl связывается с портом 8001, и поскольку оба контейнера в модуле используют одни и те же сетевые интерфейсы, включая обратную связь, вы можете указать свои запросы на localhost:8001
Кредит для этого идет к Kubernetes в действии книга (что удивительно!)