【问题标题】:Trouble setting up secure connection for ingress behind ingress - bad gateway无法为入口后面的入口设置安全连接 - 网关错误
【发布时间】:2020-08-07 22:47:57
【问题描述】:

我正在尝试建立与 kubernetes 集群的连接,但我收到了 502 bad gateway 错误。

集群有一个 nginx 入口和一个服务(同时监听 http 和 https)。此外,入口位于具有静态 IP 地址的 nginx 入口服务(我安装了 nginx helm chart)后面。

我可以在集群入口的描述中看到它知道服务的端点。 我看到 Pod 彼此成功通信(有 3 个 Pod),但我无法从 shell 中 ping 外部 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 bad request”错误。

我应该如何设置两个入口以允许与我的应用建立安全连接? 我尝试了各种注解,但总是出现上述错误。

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

谢谢!

【问题讨论】:

  • 你试过servicePort: 80吗?
  • @Lukman 是的,不幸的是它产生了同样的错误

标签: kubernetes kubernetes-helm kubernetes-ingress nginx-ingress


【解决方案1】:

您共享的入口定义不是入口定义及其值文件。

入口定义应如下所示

{{- 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=true,则会执行此操作。

  service:
    type: ClusterIP
    port: 8080

  ingress:
    enabled: true

【讨论】:

  • 你说得对,我只分享了值部分,定义是你提供的。但是,我需要知道如何配置在另一个入口之后的入口,并且您不应该使用端口 8080 进行安全连接。
【解决方案2】:

缺少的注释是nginx.org/ssl-services,它接受安全服务列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-01-10
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多