Входящее правило не работает со службой типа LoadBalancer - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь добавить правило входа во внутренний балансировщик нагрузки.Согласно док-станции, он может быть перенаправлен в службу.Он работает до тех пор, пока сервис «ClusterIP», но переходит в бесконечное перенаправление, когда его «LoadBalancer»

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - demo.azure.com
    secretName: aks-ingress-tls
  rules:
  - host: demo.azure.com
    http:
      paths:
      - path: /
        backend:
          serviceName: aks-helloworld
          servicePort: 80
      - path: /demo
        backend:
          serviceName: demo-backend
          servicePort: 80

https://demo.azure.com работает, а https://demo.azure.com/demo - нет.Разница в том, что aks-helloworld - это ClusterIP, а демо-бэкэнд - это LoadBalancer

13:33 $ kubectl get services
NAME                  TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
aks-helloworld        ClusterIP      10.0.204.168   <none>         80/TCP         15m
kubernetes            ClusterIP      10.0.0.1       <none>         443/TCP        16h
demo-backend   LoadBalancer   10.0.198.251   23.99.128.86   80:30332/TCP   15h

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Что касается вас, я не думаю, что проблема в том, что у одного есть тип clusterIP, а у другого - тип LoadBalancer.Когда трафик поступает через два пути, они все перенаправляют на сервис, в вашем случае это демо-бэкэнд.

См. Результат теста на моей стороне:

enter image description here

Доступ из Интернета:

enter image description here enter image description here

Я делаюНе добавляйте TLS, но я думаю, что весь трафик будет перенаправлен на сервис, независимо от того, есть у него TLS или нет.Я просто изменяю команду с --set serviceType="LoadBalancer" при установке второго приложения через helm.Таким образом, вы можете проверить, если что-то не так с вашими шагами.

Но я не думаю, что это хороший способ направить трафик обоими этими двумя способами на один сервис.Если вы используете TLS через Ingress, и он не будет безопасным, когда есть способ с LoadBalancer в то же время.Поскольку трафик будет проходить через TLS через LoadBalancer.

Обновление

С вашим комментарием, я думаю, вам нужно создать развертывание для вашего приложения, а затем создать службупри этом файл выглядит так:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: yourImage
        ports:
        - containerPort: 80
          name: myapp
---
apiVersion: v1 
kind: Service 
metadata: 
    name: demo-backend 
    labels: 
        app: myapp 
spec: 
    type: ClusterIP 
    selector: 
        app: myapp 
    ports: 
    - port: 80
      name: http

Развертывание является основой приложения, служба просто принимает трафик для модуля.Поэтому я предполагаю, что вы пропустили развертывание, чтобы получить доступ к своему приложению.

0 голосов
/ 26 февраля 2019

Проблема была из-за следующих заголовков, добавленных контроллером двигателя.

X-FORWARDED-PROTO: https
X-FORWARDED-PORT: 443

Ответ https://stackoverflow.com/a/54880257/747456

0 голосов
/ 10 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...