Доступ к службе k8s с IP-адресом кластера в пространстве имен по умолчанию из контейнера docker - PullRequest
0 голосов
/ 22 января 2020

У меня есть сервер, который организован с использованием k8s, его служба выглядит следующим образом:

➜  installations ✗ kubectl get svc
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                               AGE

oxd-server           ClusterIP   10.96.124.25   <none>        8444/TCP,8443/TCP                     3h32m

и это pod.

➜  helm git:(helm-rc1) ✗ kubectl get po
NAME                                   READY   STATUS             RESTARTS   AGE

sam-test-oxd-server-6b8f456cb6-5gwwd   1/1     Running            0          3h2m

Теперь у меня есть изображение docker с env переменная, которая требует URL этого сервера.

У меня есть 2 вопроса.

  1. Как изображение docker может получить URL-адрес или получить доступ к URL-адресу?

  2. Как я могу получить доступ к одному и тому же URL-адресу в моем терминале, чтобы я мог через него выполнить несколько команд curl?

Надеюсь, у меня все понятно объяснение.

Ответы [ 2 ]

1 голос
/ 22 января 2020

Если ваш контейнер docker находится за пределами кластера kubernetes, то вам не удастся получить доступ к службе ClusterIP.

Как можно догадаться по ее названию, службы типа ClusterIP доступны только из кластера .
Под внутри кластера Я имею в виду любой ресурс, управляемый Kubernetes.
Автономный docker контейнер, работающий внутри виртуальной машины, которая является частью вашего кластера K8S не является ресурсом, управляемым K8S.

Итак, для достижения желаемого у вас будут следующие возможности:

  1. Установить hostPort внутри вашего стручка. Это не рекомендуется и указывается как плохая практика в do c. Сохраняйте это использование для очень конкретного c случая.
  2. Переключите службу на NodePort вместо ClusterIP. Таким образом, вы сможете получить к нему доступ, используя IP-адрес узла + порт узла.
  3. Используйте тип обслуживания LoadBalancer, но это решение требует некоторой настройки и не является простым.
  4. Используйте Ingress вместе с IngressController, но так же, как и с балансировщиком нагрузки, это решение нуждается в некоторой конфигурации и не так просто.

В зависимости от того, что вы делаете, и если это критично или нет, вам придется выбрать одно из этих решений.

  • 1 & 2 для debug / dev
  • 3 & 4 для prod, но вам придется работать с администратором k8s
1 голос
/ 22 января 2020
  • Вы можете использовать имя службы oxd-server из любого другого модуля в том же пространстве имен для доступа к нему, т. Е. Если служба поддерживается модулями, которые обслуживают HTTPS, вы можете получить доступ к службе в https://oxd-server:8443/.

    Если клиентский модуль, который хочет получить доступ к этой службе, находится в другом пространстве имен, тогда вы можете использовать oxd-server.<namespace> имя. В вашем случае это будет oxd-server.default, поскольку ваша служба находится в пространстве имен по умолчанию.

  • Чтобы получить доступ к этой службе за пределами кластера (из вашего терминала) для локальной отладки, вы можете использовать переадресация порта .

    Затем вы можете использовать URL localhost:8443, чтобы сделать любые запросы, и запрос будет перенаправлен на службу.

kubectl port-forward svc/oxd-server 8443:8443
  • Если вы хотите чтобы получить доступ к этой услуге из-за пределов кластера для производственного использования, вы можете сделать службу как type: NodePort или type: LoadBalancer. Смотрите типы услуг здесь.
...