Kubernetes 延迟和间歇性故障

问题描述 投票:0回答:1

我对 Kubernetes 很陌生,面临一个问题:调用我的 API(部署在 k8 env 中)需要 10 秒。这里的 10 秒不是应用程序的响应,而是发现所需的时间,我已经对响应进行了硬编码,但它仍然是 10 秒,我有一个简单的入口,如下所示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-config
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: "/admins"
        backend:
          service:
            name: admin-service
            port:
              number: 8070
      - pathType: Prefix
        path: "/employee"
        backend:
          service:
            name: employee-service
            port:
              number: 8080

还有一个简单的服务如下

apiVersion: v1
kind: Service
metadata:
  name: employee-service
spec:
  selector:
    name: employee-app
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

下面是应用程序yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: employee-app-deployment
  namespace: app-namespace
spec:
  replicas: 3
  selector:
    matchLabels:
      app: employee-app
  template:
    metadata:
      labels:
        app: employee-app
    spec:
      dnsPolicy: Default
      containers:
      - name: employee-spring-app
        image: <image>
        ports:
        - containerPort: 8080

这里可能存在什么问题?我缺少任何配置吗?

我多次尝试更改 dnsPolicy 并尝试不同的配置,但似乎我错过了一些东西,因为如果调用通过入口,则需要花费很多时间,如果调用直接来自应用程序内部,则速度更快(200ms )所以我在想入口级别是否有什么问题。

更新1 我尝试查看日志,发现 110 连接超时,并且我的节点或 LBaaS 中不存在 IP

kubernetes
1个回答
0
投票

此错误来自 Nginx,因为上游。 首先检查该服务是否可以通过 IP 访问。因此,创建端口转发:

kubectl port-forward deployment/employee-app-deployment 8080 8080

并尝试通过以下方式达到目标:

http://localhost:8080
  • 如果工作正常,则问题出在 dns 或 Nginx 上 控制器。

检查问题是否与 dns 相关:

kubectl exec -i -t -n <NGINX-NAMESPACE> <NGINX-POD> -- cat /etc/resolv.conf

并确保 dns 工作正常。

问题来自 nginx 控制器的情况很少见,但您每次都可以通过 helm 重新安装它。

  • 如果不是,看一下上游是Endpoints,对应的是 到与选择器匹配的 Pod。您可以查看端点 因为他们有相同的名字,所以服务很容易:

    kubectl get -o yaml 端点员工应用程序部署

并通过以下方式检查 IP 是否与您的 pod 相同:

kubectl get pod podname -o custom-columns=NAME:metadata.name,IP:status.podIP
© www.soinside.com 2019 - 2024. All rights reserved.