kubernetes (GKE) вход nginx выглядит нормально, но не работает - PullRequest
0 голосов
/ 02 ноября 2019

Я следовал этому руководству , чтобы установить входной контроллер nginx в GKE.

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

Я уже успешно настроил тестовое приложение и сервис. Протестировал это, перенаправив порт в контейнер.

Настройка входа казалась хорошей, но я не могу получить к ней доступ. При открытии external ip выводится следующая ошибка 502:

Ошибка: ошибка сервера

Сервер обнаружил временную ошибку и не смог выполнить ваш запрос.

Пожалуйста, повторите попытку через 30 секунд.

Пожалуйста, посмотрите describe входа:

│Name:         teamcity                                                                                                                           │
│Namespace:    default                                                                                                                            │
│Labels:       <none>                                                                                                                             │
│Annotations:  ingress.kubernetes.io/backends: {"k8s-be-31984--b5c10175cf4f125b":"UNHEALTHY"}                                                     │
│              ingress.kubernetes.io/forwarding-rule: k8s-fw-default-teamcity--b5c10175cf4f125b                                                   │
│              ingress.kubernetes.io/target-proxy: k8s-tp-default-teamcity--b5c10175cf4f125b                                                      │
│              ingress.kubernetes.io/url-map: k8s-um-default-teamcity--b5c10175cf4f125b                                                           │
│              kubectl.kubernetes.io/last-applied-configuration:                                                                                  │
│                {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"teamcity","namespace":"default"},"spec":│
│{"backend...                                                                                                                                     │
│API Version:  extensions/v1beta1                                                                                                                 │
│Kind:         Ingress                                                                                                                            │
│Metadata:                                                                                                                                        │
│  Creation Timestamp:  2019-11-02T12:49:21Z                                                                                                      │
│  Generation:          1                                                                                                                         │
│  Resource Version:    553521                                                                                                                    │
│  Self Link:           /apis/extensions/v1beta1/namespaces/default/ingresses/teamcity                                                            │
│  UID:                 312aa230-fd6f-11e9-ad91-42010a84009d                                                                                      │
│Spec:                                                                                                                                            │
│  Backend:                                                                                                                                       │
│    Service Name:  teamcity                                                                                                                      │
│    Service Port:  8111                                                                                                                          │
│Status:                                                                                                                                          │
│  Load Balancer:                                                                                                                                 │
│    Ingress:                                                                                                                                     │
│      Ip:  35.190.86.15                                                                                                                          │
│Events:                                                                                                                                          │
│  Type    Reason  Age   From                     Message                                                                                         │
│  ----    ------  ----  ----                     -------                                                                                         │
│  Normal  ADD     18m   loadbalancer-controller  default/teamcity                                                                                │
│  Normal  CREATE  17m   loadbalancer-controller  ip: 35.190.86.15   

Кроме того, вот мой файл yaml для всегоmashup:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: teamcity
  labels:
    app: teamcity
spec:
  replicas: 1
  selector:
    matchLabels:
      app: teamcity
  template:
    metadata:
      labels:
        app: teamcity
    spec:
      containers:
      - name: teamcity-server
        image: jetbrains/teamcity-server:latest
        ports:
        - containerPort: 8111
---
apiVersion: v1
kind: Service
metadata:
  name: teamcity
  labels:
    app: teamcity
spec:
  type: NodePort
  ports:
  - port: 8111
    targetPort: 8111
    protocol: TCP
  selector:
    app: teamcity
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: teamcity
spec:
  backend:
    serviceName: teamcity
    servicePort: 8111

Я хотел бы знать, что я здесь не так сделал.

Ответы [ 2 ]

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

Вы используете входной контроллер GKE с этим ресурсом Ingress, а не Nginx. И доказательство тому, что он создает все ресурсы для создания балансировщика нагрузки HTTP;правило пересылки, целевой прокси, карта URL, бэкэнд-сервис.

Вам нужно передать аннотацию kubernetes.io/ingress.class: "nginx" в свой ресурс Ingress, чтобы он знал, что он должен использовать Nginx Ingress Controller.

Теперь вы получаете 503 на некоторое время, потому что балансировщики нагрузки GCP неначать работать прямо сейчас. Вероятно, через 3-4 минуты вы получите 200.

0 голосов
/ 02 ноября 2019

Поскольку вы используете вход, служба nginx будет работать с LoadBalancer, а другие могут храниться только на clusterIP.

Вы можете изменить службу на тип ClusterIP вместо Nodeport здесь и попробовать оформить ваше правило входа следующим образом -

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: rule-name
  namespace: default
spec:
  rules:
  - host: hostname
    http:
      paths:
      - backend:
          serviceName: teamcity
          servicePort: 8111

В текущем сценарии вы не сопоставили имя хостак вашему правилу входа, и если у вас его нет, вы можете просто использовать DNS-имя, сопоставленное с вашим publicIP / ExternalIP nginx.

...