AWS EKS: служба (LoadBalancer) работает, но не отвечает на запросы

Я использую AWS EKS. Я запустил свое приложение django с помощью gunicorn в кластере kubernetes.

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: api
  labels:
    app: api
    type: web
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: api
        type: web
    spec:
      containers:
      - name: vogofleet
        image: xx.xx.com/api:image2
        imagePullPolicy: Always
        env:
        - name: DATABASE_HOST
          value: "test-db-2.xx.xx.xx.xx.com"
        - name: DATABASE_PASSWORD
          value: "xxxyyyxxx"
        - name: DATABASE_USER
          value: "admin"
        - name: DATABASE_PORT
          value: "5432"
        - name: DATABASE_NAME
          value: "test"
        ports:
        - containerPort: 9000

Я применил эти изменения и вижу, что мой модуль работает kubectl get pods

Теперь я пытаюсь открыть его через объект службы. Вот мой служебный объект,

# service
---
apiVersion: v1
kind: Service
metadata:
  name: api
  labels:
    app: api
spec:
  ports:
    - port: 9000
      protocol: TCP
      targetPort: 9000
  selector:
    app: api
    type: web
  type: LoadBalancer

Сервис также работает. Он дал мне внешний IP-адрес для доступа к службе, который является адресом балансировщика нагрузки. Я вижу, что он запустил новый балансировщик нагрузки в консоли AWS. Но я не могу получить к нему доступ из браузера. В нем говорится, что адрес не вернул никаких данных. ELB показывает проверку работоспособности экземпляров как OutOfService.

В кластере работают и другие поды. Когда я запускаю printenv в этих модулях, вот результат:

root@consumer-9444cf7cd-4dr5z:/consumer# printenv | grep API
API_PORT_9000_TCP_ADDR=172.20.140.213
API_SERVICE_HOST=172.20.140.213
API_PORT_9000_TCP_PORT=9000
API_PORT=tcp://172.20.140.213:9000
API_PORT_9000_TCP=tcp://172.20.140.213:9000
API_PORT_9000_TCP_PROTO=tcp
API_SERVICE_PORT=9000

И я попытался проверить подключение к своему api pod,

root@consumer-9444cf7cd-4dr5z:/consumer# telnet $API_PORT_9000_TCP_ADDR $API_PORT_9000_TCP_PORT
Trying 172.20.140.213...
telnet: Unable to connect to remote host: Connection refused

Но когда я перенаправляю порт на свой локальный хост, я могу получить к нему доступ на моем локальном хосте,

$ kubectl port-forward api-6d94dcb65d-br6px 9000

и проверьте соединение,

$ nc -vz localhost 9000
found 0 associations
found 1 connections:
     1: flags=82<CONNECTED,PREFERRED>
  outif lo0
  src ::1 port 53299
  dst ::1 port 9000
  rank info not available
  TCP aux info available

Connection to localhost port 9000 [tcp/cslistener] succeeded!

Почему я не могу получить к нему доступ из других контейнеров и из общедоступного Интернета? И, Группы безопасности верны.


person Luv33preet    schedule 27.02.2019    source источник
comment
Можете ли вы опубликовать вывод kubectl describe service api?   -  person Pampy    schedule 27.02.2019
comment
Вы нашли проблему? Как вы ее решили?   -  person danielrvt    schedule 21.10.2020


Ответы (1)


У меня точно такая же проблема. Вот o / p команды kubectl describe service.

kubectl describe services nginx-elb Name: nginx-elb Namespace: default Labels: deploy=slido Annotations: service.beta.kubernetes.io/aws-load-balancer-internal: true Selector: deploy=slido Type: LoadBalancer IP: 10.100.29.66 LoadBalancer Ingress: internal-a2d259057e6f94965bfc1f08cf86d4ce-884461987.us-west-2.elb.amazonaws.com Port: http 80/TCP TargetPort: 3000/TCP NodePort: http 32582/TCP Endpoints: 192.168.60.119:3000 Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 119s service-controller Ensuring load balancer Normal EnsuredLoadBalancer 117s service-controller Ensured load balancer
person user1010373    schedule 25.07.2020