【问题标题】:Kubernetes Kibana operator failures and Nginx ingress timeoutsKubernetes Kibana 操作员故障和 Nginx 入口超时
【发布时间】:2020-11-30 21:50:52
【问题描述】:

我刚刚开始在 Azure Linux VM 上实施 Kubernetes 集群。我对这一切都很陌生。集群在一个小型 VM(2 核,16GB)上运行。我使用他们的在线教程设置了 ECK 堆栈,并使用 Nginx Ingress 控制器来公开它。

一天中的大部分时间,一切都运行良好。我可以访问 Kibana 仪表板,运行 Elastic 查询,Nginx 正在工作。但大约每天都会发生一次,导致匹配 Kibana 服务的 Kibana Endpoint 没有任何 IP 地址。因此,服务无法正确路由到容器。发生这种情况时,Kibana pod 的状态为 Running,但表示 0/1 正在运行。它永远不会触发任何重新启动,因此,Kibana 仪表板变得无法访问。我尝试通过关闭 Docker 容器、强制终止 pod 来重现此问题,但无法可靠地重现它。

查看 Kibana pod 上的日志,由于超时,出现一堆错误。 Nginx 日志说它找不到服务的端点。看起来这可能是source。有没有人遇到过这个?有谁知道防止这种情况的可靠方法?

这可能应该是一个单独的问题,但这导致的另一个问题是完全阻止所有 Nginx Ingress。日志中看不到任何新请求,并且在有关未找到端点的消息之后日志完全停止。结果,通常由 Ingress 负责的所有 URL 都会超时,整个集群在外部变得不可用。这可以通过删除 Nginx 控制器 pod 来解决,但 pod 不会自行重启。有人可以解释为什么这样的问题会完全阻止 Nginx 吗?以及为什么 Nginx pod 检测不到这一点并重启?

编辑:

Nginx 日志以此结尾:

W1126 16:20:31.517113       6 controller.go:950] Service "default/gwam-kb-http" does not have any active Endpoint.
W1126 16:20:34.848942       6 controller.go:950] Service "default/gwam-kb-http" does not have any active Endpoint.
W1126 16:21:52.555873       6 controller.go:950] Service "default/gwam-kb-http" does not have any active Endpoint.

任何进一步的请求都会超时并且不会出现在日志中。

我没有 kibana pod 的日志,但它们只是 kibana 服务default/gwam-kb-http 的一致超时(与上面的 Nginx 日志相同)。这导致就绪探测失败,并显示0/1 Running,但没有触发 Pod 的重启。

一切正常时的 Kibana Endpoints

Name:         gwam-kb-http
Namespace:    default
Labels:       common.k8s.elastic.co/type=kibana
              kibana.k8s.elastic.co/name=gwam
Annotations:  endpoints.kubernetes.io/last-change-trigger-time: 2020-11-26T16:27:20Z
Subsets:
  Addresses:          10.244.0.6
  NotReadyAddresses:  <none>
  Ports:
    Name   Port  Protocol
    ----   ----  --------
    https  5601  TCP

Events:  <none>

遇到这个问题,Addresses为空,pod IP在NotReadyAddresses

我正在使用 ECK 设置教程中非常基本的 YAML:

弹性(这里没有问题)

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: gwam
spec:
  version: 7.10.0
  nodeSets:
  - name: default
    count: 3
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 2Gi
        storageClassName: elasticsearch

Kibana:

apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: gwam
spec:
  version: 7.10.0
  count: 1
  elasticsearchRef:
    name: gwam

Kibana 服务的入口:

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: nginx-ingress-secure-backend-no-rewrite
  annotations: 
    kubernetes.io/ingress.class: nginx
    nginx.org/proxy-connect-timeout: "30s"
    nginx.org/proxy-read-timeout: "20s"
    nginx.org/proxy-send-timeout: "60s"
    nginx.org/client-max-body-size: "4m"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  tls: 
  - hosts:
    - <internal company site>
    secretName: gwam-tls-secret
  rules:
    - host: <internal company site>
      http:
        paths:
          - path: /
            backend:
              serviceName: gwam-kb-http
              servicePort: 5601

更多环境细节:
Kubernetes 版本:1.19.3
操作系统:Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1031-azure x86_64)

编辑 2:

似乎我在这里遇到了某种网络错误。我的所有 pod 都不能为 kubernetes.default 进行 dnslookup。所有网络 pod 都在运行,但在将日志添加到 CoreDNS 后,我看到以下内容: [ERROR] plugin/errors: 2 1699910358767628111.9001703618875455268. HINFO: read udp 10.244.0.69:35222-&gt;10.234.44.20:53: i/o timeout

我正在为我的网络使用 Flannel。考虑尝试重置并切换到 Calico 并按照一些答案的建议增加 nf_conntrack_max。

【问题讨论】:

  • 请添加您收到的 YAML 清单、日志和错误。请详细说明您的环境。
  • 更换 Calico 是否解决了您的问题? kubectl get events 有什么有趣的事情吗?有没有配置防火墙?您是否尝试手动重启此 pod?

标签: elasticsearch kubernetes kibana nginx-ingress


【解决方案1】:

这最终成为我的一个非常简单的错误。我认为这是一个 pod 或 DNS 问题,但只是一般的网络问题。我的 IP 转发已关闭。我打开了它:

sysctl -w net.ipv4.ip_forward=1

并将net.ipv4.ip_forward=1 添加到/etc/sysctl.conf

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2019-10-08
    • 2015-08-28
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多