Как получить доступ к серверу на kubernetes с вашего локального компьютера? - PullRequest
0 голосов
/ 03 апреля 2020

В моей компании есть платформа kubernetes, на которой у меня есть модуль ingress, работающий в пространстве имен my_namespace:

apiVersion: v1
kind: Pod
metadata:
 name: ingress
 labels:
  app: ingress
spec:
 containers:
  - name: ingress
    image: docker:5000/mma/neurotec-ingress
    imagePullPolicy: Always

kubectl get pods -n my_namespace

NAME            READY   STATUS    RESTARTS   AGE
ingress         1/1     Running   1          11d

Модуль сервер, который прослушивает порт 8080.

У меня также есть определенная служба, которая экспортирует модуль наружу:

apiVersion: v1
kind: Service
metadata:
  name: ingress
  labels:
    app: ingress
spec:
  ports:
  - port: 8080
    protocol: TCP
  selector:
    app: ingress
  type: LoadBalancer

kubectl describe service -n my_namespace ingress

Name:              ingress
Namespace:         my_namespace
Labels:            app=ingress
Selector:          app=ingress
Type:              LoadBalancer
IP:                10.104.95.96
Port:              <unset>  8080/TCP
TargetPort:        8080/TCP
Endpoints:         10.16.1.232:8080

I Теперь хочу отправить сообщение на сервер с моего локального компьютера. Прежде всего я хочу убедиться, что его IP-адрес доступен. Однако простой host command возвращает ошибки:

host 10.16.1.232
Host 10.16.1.232 not found: 3(NXDOMAIN)

host ingress.my_namespace.nt // .nt is company's prefix
Host ingress.my_namespace not found: 3(NXDOMAIN)

, и если я пытаюсь запустить telepresence, он также возвращает ошибку:

Looks like there's a bug in our code. Sorry about that!

Traceback (most recent call last):
  File "/usr/bin/telepresence/telepresence/cli.py", line 135, in crash_reporting
    yield
  File "/usr/bin/telepresence/telepresence/main.py", line 65, in main
    remote_info = start_proxy(runner)
  File "/usr/bin/telepresence/telepresence/proxy/__init__.py", line 138, in start_proxy
    run_id=run_id,
  File "/usr/bin/telepresence/telepresence/proxy/remote.py", line 144, in get_remote_info
    runner, deployment_name, deployment_type, run_id=run_id
  File "/usr/bin/telepresence/telepresence/proxy/remote.py", line 91, in get_deployment_json
    return json.loads(output)["items"][0]
IndexError: list index out of range

Вопрос: как добраться до сервера на kubernetes с вашего локального компьютера ?

1 Ответ

0 голосов
/ 03 апреля 2020

Я думаю, вам следует воспользоваться услугой type: LoadBalancer. (не ClusterIP)

из документации kubernetes

  • ClusterIP: Предоставляет Сервису внутренний IP-адрес кластера. Выбор этого значения делает службу доступной только из кластера. Это тип службы по умолчанию.
  • LoadBalancer: Предоставляет службу извне с помощью балансировщика нагрузки облачного провайдера. Службы NodePort и ClusterIP, для которых автоматически создаются внешние маршруты балансировки нагрузки.

Ниже приведен мой пример файла службы loadbalaner. Я открыл порт 80 для inte rnet и сопоставил порт 80 для pod с меткой run: my-web-portal port 8000.

apiVersion: v1
kind: Service
metadata:
  name: my-web-portal-svc
  labels:
    run: my-web-portal-svc
spec:
  ports:
  - port: 80
    targetPort: 8000
    protocol: TCP
    name: port-80
  selector:
    run: my-web-portal
  type: LoadBalancer

и вот мой файл развертываний yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-web-portal
spec:
  selector:
    matchLabels:
      run: my-web-portal
  replicas: 1

  template:
    metadata:
      labels:
        run: my-web-portal

    spec:
      containers:
      - name: backend
        image: xxxxxx-backend

для получить конечные точки, я запускаю команду

kubectl describe service my-web-portal-svc

Команда распечатает конечные точки, которые использовались для подключения к вашим модулям

Type:                     LoadBalancer
IP:                       10.100.108.141
LoadBalancer Ingress:     xxxxxxxxxxxxxx.us-west-2.elb.amazonaws.com

Оставляйте комментарии, если у вас есть какие-либо вопросы.

...