Не удается получить доступ к службе LoadBalancer в Kubernetes - PullRequest
0 голосов
/ 30 января 2020

Мне удалось развернуть приложение python в кластере kubernetes. Образ приложения python развернут в AWS ECR (Elasti c Container Registry).
Мое развертывание:

( ИМЯ ) сервер графиков-отдыха
( ГОТОВ ) 1/1
( ОБНОВЛЕНИЕ ) 1
( В НАЛИЧИИ ) 1
( ВОЗРАСТ ) 33 м
( КОНТЕЙНЕРЫ ) сервер диаграмм-отдыха
( ИЗОБРАЖЕНИЯ ) *****. Dkr.ecr.eu-west-2.amazon aws .com / сервер диаграмм-отдыха: последние
( SELECTOR ) приложение = сервер диаграмм-отдыха

И мой сервис:

( NAME ) карт-сервер-сервис
( ТИП ) LoadBalancer
( CLUSTER-IP ) 10.100.4.207
( ВНЕШНИЙ- IP ) *******. Eu-west-2.elb.amazon aws .com
( PORT (s) ) 8765: 32735 / TCP
( ВОЗРАСТ ) 124 м
( SELECTOR ) приложение = сервер графиков

В соответствии с этим AWS руководство , когда я делаю curl *****.us-west-2.elb.amazonaws.com:80, у меня должен быть внешний доступ к Балансировщику нагрузки, который направит меня к IP-адресу моего модуля.
Но все, что я получаю, это

(6) Не удалось разрешить хост: *******. Eu-west-2.elb.amazon aws .com



И если подумать, хочу ли я получить доступ к своему модулю и отправить несколько запросов, у меня должен быть внешний ip, такой как 111.111.111.111 (см. Пример).


РЕДАКТИРОВАТЬ


yaml развертывания:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: charting-rest-server
spec:
  selector:
    matchLabels:
      app: charting-rest-server
  replicas: 1
  template:
    metadata:
      labels:
        app: charting-rest-server
    spec:
      containers:
      - name: charting-rest-server
        image: *****.eu-west-2.amazonaws.com/charting-rest-server:latest
        ports: 
          - containerPort: 5000


yaml службы:

apiVersion: v1
kind: Service
metadata:
  name:  charting-rest-server-service
spec:
  type: LoadBalancer
  selector:
    app: charting-rest-server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000

Я уже пытался с предложениями из комментариев, используя входящий экземпляр, но я потратил огромное количество времени, пытаясь понять, как они работают, "я делаю что-то не так" ? / et c.

Я помещу файл yaml, который использовал здесь, но он не изменился, так как мое поле ADDRESS было пустым - не использовать ip.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: charting-rest-server-ingress
spec:
  rules:
  - host: charting-rest-server-service
    http:
      paths:
      - path:/
        backend:
          serviceName: charting-rest-server-service
          servicePort: 80

Я застрял в этой проблеме на столько времени, что буду признателен за помощь.

1 Ответ

1 голос
/ 07 февраля 2020

Вы уже создали Service с типом LoadBalancer, но похоже, что у вас настроены неверные порты.

Ваш Deployment создан с containerPort: 5000, а ваш Service указывает на targetPort: 9376. Они должны совпадать для выставления Deployment.

Если вам трудно писать yaml для Service, вы можете выставить Deployment, используя следующую команду kubectl:

kubectl expose --namespace=tick deployment charting-rest-server --type=LoadBalancer --port=8765 --target-port=5000 --name=charting-rest-server-service

После того, как вы исправите эти порты, вы сможете получить доступ к службе извне, используя ее имя хоста:

status:
  loadBalancer:
    ingress:
    - hostname: aba02b223436111ea85ea06a051f04d8-1294697222.eu-west-2.elb.amazonaws.com

Я также рекомендую это руководство Учебное пособие: Предоставление услуг на вашем AWS Быстрый запуск кластера Kubernetes .

Если вам нужен больший контроль над правилами http, рассмотрите возможность использования ingress, вы можете прочитать больше о ALB Ingress Controller на Amazon EKS также Использование балансировщика сетевой нагрузки с входным контроллером NGINX в Amazon EKS .

...