Проверка работоспособности Google Kubernetes Ingress всегда дает сбой - PullRequest
0 голосов
/ 05 ноября 2019

Я настроил модуль веб-приложения, доступный через apache через порт 80. Я не могу настроить службу + вход для доступа из Интернета. Проблема заключается в том, что бэкэнд-сервисы всегда сообщают о НЕЗДОРОВОМ.

Pod Config:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    name: webapp
  name: webapp
  namespace: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      name: webapp
  template:
    metadata:
      labels:
        name: webapp
    spec:
      containers:
      - image: asia.gcr.io/my-app/my-app:latest
        name: webapp
        ports:
        - containerPort: 80
          name: http-server

Service Config:

apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  selector:
    name: webapp
  ports:
    - protocol: TCP
      port: 50000
      targetPort: 80

Ingress Config:

kind: Ingress
metadata:
  name: webapp-ingress
spec:
  backend:
    serviceName: webapp-service
    servicePort: 50000

Это приводит к тому, что бэкэнд-сервисы сообщают, что они НЕЗДОРОВЫЕ.

Параметры проверки работоспособности:

Path: /
Protocol: HTTP
Port: 32463
Proxy protocol: NONE

Дополнительная информация: я пробовал другой подход, чтобы представить развертывание как нагрузкубалансировщик с внешним IP, и это прекрасно работает. При попытке использовать NodePort + Ingress эта проблема сохраняется.

1 Ответ

1 голос
/ 06 ноября 2019

С GKE проверка работоспособности на Балансировщике нагрузки создается автоматически при создании входа. Поскольку HC создается автоматически, то же самое относится и к правилам брандмауэра.

Поскольку у вас не настроен readinessProbe, LB создал HC по умолчанию (тот, который вы перечислили). Для правильной отладки вам необходимо выделить место сбоя.

Сначала убедитесь, что ваш модуль правильно обслуживает трафик;

kubectl exec [pod_name] -- wget localhost:80

Еслив приложение встроено curl, вы можете использовать его вместо wget. Если в приложении нет ни wget, ни curl, перейдите к следующему шагу.

  1. получите следующий вывод и проследите за выводом:

    kubectl get po -l name = webapp -o широкий
    kubectl get svc webapp-service

Вам необходимо сохранить службу и кластер pIP

SSH к узлу в вашем кластере и запустите sudo toolbox bash

Установить curl:

apt-get install curl`

Протестируйте модули, чтобы убедиться, что они обслуживают трафик внутри кластера:

curl -I [pod_clusterIP]: 80

Это необходимо вернутьответ 200

Проверка службы:

curl -I [service_clusterIP]: 80

Если модуль не возвращает ответ 200, контейнер либоне работает правильно или порт не открыт на модуле.

Если модуль работает, а служба - нет, существует проблема с маршрутами в вашем iptables, которая управляется kube-proxy и может быть проблемой с кластером.

Наконец, если и модуль, и служба работают, существует проблема с проверками работоспособности балансировщика нагрузки, а также проблема, которую Google должен исследовать.

...