【问题标题】:Exposing Kibana behind GCE ingress (UNHEALTHY state)在 GCE 入口后面暴露 Kibana(不健康状态)
【发布时间】:2021-03-18 12:33:17
【问题描述】:

我试图在 GCE 入口后面公开 Kibana,但入口将 kibana 服务报告为 UNHEALTHY,而它是 healthy and ready。请注意,Ingress 创建的健康检查仍然使用根 / 和 Port 上的默认值 HTTP:ex:32021。 将 GCP 控制台中的运行状况检查更改为 /login 和 /login 上的 Port: 5601 不会改变任何内容,并且该服务仍报告为 Unhealthy。健康检查端口也被覆盖为原始值,这很奇怪。 我正在使用ECK 1.3.1,以下是我的配置。我错过了什么吗?提前谢谢你。

apiVersion: elasticsearch.k8s.elastic.co/v1beta1
kind: Elasticsearch
metadata:
  name: d3m0
spec:
  version: 7.10.1
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false
---
apiVersion: kibana.k8s.elastic.co/v1beta1
kind: Kibana
metadata:
  name: d3m0
spec:
  version: 7.10.1
  count: 1
  elasticsearchRef:
    name: d3m0
  podTemplate:
    metadata:
      labels:
        kibana: node
    spec:
      containers:
      - name: kibana
        resources:
          limits:
            memory: 1Gi
            cpu: 1
        readinessProbe:
          httpGet:
            scheme: HTTPS
            path: "/login"
            port: 5601
  http:
    service:
      spec:
        type: NodePort
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: kibana-ingress
spec:
  backend:
      serviceName: d3m0-kb-http
      servicePort: 5601

【问题讨论】:

  • HTTP 期望 200 OK 响应,如果有类似 301 的重定向将被标记为不健康。如果把HC改成TCP,能用吗?
  • 嗨@ArnauSenserrich,感谢您的评论。在这里,Ingress 后端服务只能接收来自健康检查问题的 HTTPS 流量,因为它们完全按照 ECK 的最佳安全实践进行配置。正如here 所解释的,入口的默认健康检查是在自动失败的节点端口上使用 HTTP。我现在设法进行了工作修复。完成所有设置后,我将发布一个完整的功能示例。

标签: elasticsearch kibana google-kubernetes-engine kubernetes-ingress elastic-cloud


【解决方案1】:

使用 ECK 时,ES 和 Kibana 上的所有安全功能都已启用,这意味着它们的服务不接受默认 GCP 负载均衡器 Healthcheck 使用的 HTTP 流量。您必须将所需的注释添加到服务并覆盖运行状况检查路径,如下面的代码所示。更多详情请查看here。

    apiVersion: kibana.k8s.elastic.co/v1
    kind: Kibana
    metadata:
      name: d3m0
    spec:
      version: 7.10.1
      count: 1
      elasticsearchRef:
        name: d3m0
      http:
        service:
          metadata:
            labels:
              app: kibana
            annotations:
              # Enable TLS between GCLB and the application
              cloud.google.com/app-protocols: '{"https":"HTTPS"}'
              service.alpha.kubernetes.io/app-protocols: '{"https":"HTTPS"}'
              # Uncomment the following line to enable container-native load balancing.
              cloud.google.com/neg: '{"ingress": true}'
    
      podTemplate:
        metadata:
          labels:
            name: kibana-fleet
        spec:
          containers:
          - name: kibana
            resources:
              limits:
                memory: 1Gi
                cpu: 1
            readinessProbe:
                  # Override the readiness probe as GCLB reuses it for its own healthchecks
                  httpGet:
                    scheme: HTTPS
                    path: "/login"
                    port: 5601

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 2021-02-12
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2022-06-13
    • 2023-02-03
    • 2018-09-03
    相关资源
    最近更新 更多