Не удалось настроить безопасное соединение для входящего трафика за входящим трафиком - плохой шлюз

Я пытаюсь установить соединение с кластером kubernetes и получаю 502 bad gateway ошибку.

Кластер имеет вход nginx и службу (прослушивание как по http, так и по https). Кроме того, вход находится за входящей службой nginx (у меня есть nginx helm chart установлен) со статическим IP-адресом.

В описании входа в кластер я вижу, что он знает конечные точки службы. Я вижу, что модули успешно взаимодействуют друг с другом (есть 3 модуля), но я не могу пинговать внешний nginx из оболочки.

Это входящие значения кластера в values.yaml:

  ingress:
    # If `true`, an Ingress is created
    enabled: true
    # The Service port targeted by the Ingress
    servicePort: http
    # Ingress annotations
    annotations:
      kubernetes.io/ingress.class: "nginx"
    # Additional Ingress labels
    labels: {}
      # List of rules for the Ingress
    rules:
      -
        # Ingress host
        host: my-app.com
        # Paths for the host
        paths:
          - /
    # TLS configuration
    tls:
      - hosts:
          - my-app.com
        secretName: my-app-tls

Когда я перехожу к my-app.com, я вижу в браузере, что у меня безопасное соединение (значок замка рядом с URL-адресом), но, как я уже сказал, я получаю 502 bad gateway ошибку. Если я заменю servicePort с http на https, я получаю ошибку «400 неверный запрос».

Как мне настроить оба входа, чтобы обеспечить безопасное соединение с моим приложением? Я пробовал всевозможные аннотации, но всегда получал указанные выше ошибки.

        nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
        nginx.ingress.kubernetes.io/ssl-redirect: "false"

Спасибо!


person towel    schedule 07.08.2020    source источник
comment
Вы пробовали servicePort: 80?   -  person Lukman    schedule 08.08.2020
comment
@Lukman да, к сожалению, выдает ту же ошибку   -  person towel    schedule 08.08.2020


Ответы (2)


Общее определение входящего трафика не относится к входному определению и его файлу значений.

Определение Ingress должно выглядеть примерно так, как показано ниже.

{{- if .Values.ingress.enabled -}}
{{- $fullName := include "app.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
apiVersion: networking.k8s.io/v1beta1
{{- else -}}
apiVersion: extensions/v1beta1
{{- end }}
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    {{- include "app.labels" . | nindent 4 }}
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
{{- if .Values.ingress.tls }}
  tls:
  {{- range .Values.ingress.tls }}
    - hosts:
      {{- range .hosts }}
        - {{ . | quote }}
      {{- end }}
      secretName: {{ .secretName }}
  {{- end }}
{{- end }}
  rules:
  {{- range .Values.ingress.hosts }}
    - host: {{ .host | quote }}
      http:
        paths:
        {{- range .paths }}
          - path: /
            backend:
              serviceName: {{ $fullName }}
              servicePort: {{ $svcPort }}
        {{- end }}
  {{- end }}
{{- end }}

Это выполняется, если ваши значения имеют ingress enabled = true.

  service:
    type: ClusterIP
    port: 8080

  ingress:
    enabled: true
person Rohit    schedule 08.08.2020
comment
Вы правы, я поделился только частью ценностей, а определение - то, которое вы дали. Однако мне нужно знать, как настроить входящий трафик, который находится за другим входом, и вам не следует использовать порт 8080 для безопасных подключений. - person towel; 08.08.2020

Отсутствует аннотация nginx.org/ssl-services, которая принимает список защищенных служб.

person towel    schedule 10.08.2020