GKE Ingress 使用加密服务返回 502

GKE Ingress 使用加密服务返回 502

我在 GCP 上,并使用 ElasticSearch 运算符将 ElasticSearch 和 Kibana 部署到集群中。我创建了一个带有预共享证书的外部 Ingress,用于将流量发送到 Kibana 服务。但是我收到了 502 错误,我正在尝试了解问题所在。我现在最好的猜测是 GCE Ingress 无法与加密的后端通信 - 但我不确定如何调试它。为了测试这一点,我唯一能做的就是禁用 Kibana 的 SSL - 然后连接就可以正常工作了。但是,这会删除加密,我不太喜欢 - 我宁愿从 Ingress 到 pod 的流量保持加密。

现在,从长远来看,我可以选择服务网格的路线,这也是我们计划的 - 但就目前而言,我只想让该死的 Ingress 发挥作用并连接到加密端点。看起来可以通过注释设置 nginx 控制器来执行此操作 - 但我看不到 GCE 负载均衡器有类似功能。我遗漏了什么吗?

Kibana 清单

apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: kibana
  namespace: my-service
spec:
  version: 8.2.2
  count: 1
  elasticsearchRef:
    name: elastic
  config:
    server:
      publicBaseUrl: "https://example.com"
  http:
    service:
      spec:
        type: ClusterIP
      metadata:
        annotations:
          cloud.google.com/backend-config: '{"default": "kibana-backendconfig"}'
          cloud.google.com/neg: '{"ingress": true}'

后端条件

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: kibana-backendconfig
  namespace: my-service
spec:
  securityPolicy:
    name: "cf-ip-only"
  healthCheck:
    checkIntervalSec: 60
    healthyThreshold: 1
    port: 5601
    requestPath: /login
    type: HTTPS
    unhealthyThreshold: 2

入口清单

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kibana-ingress
  namespace: my-service
  annotations:
    ingress.gcp.kubernetes.io/pre-shared-cert: "example-com"
    kubernetes.io/ingress.class: "gce"
    kubernetes.io/ingress.allow-http: "false"
    kubernetes.io/ingress.regional-static-ip-name: "kibana-static-ip"
spec:
  defaultBackend:
    service:
      name: kibana-kb-http
      port:
        number: 5601
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: kibana-kb-http
                port:
                  number: 5601

我已经通过端口转发测试了 Kibana 实例。它工作正常。我已向 Ingress 发送请求 - 它们返回 502,显示 Ingress 的正确证书。当我检查已部署的 Ingress 时,urlMap 显示后端运行正常(这意味着 BackendConfig 健康检查工作正常并将流量发送到正确的位置)。

目前,我发现导致该问题的两个可能原因:

  • GCE Ingress 不知道它需要进行加密流量,或者
  • Ingress 无法从 Kibana 访问自签名证书,或者
  • 两个都

有人获得过 GCE Ingress 来正确地将流量路由到使用自签名证书运行的 Kibana 吗?

相关内容