我对 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
此错误来自 Nginx,因为上游。 首先检查该服务是否可以通过 IP 访问。因此,创建端口转发:
kubectl port-forward deployment/employee-app-deployment 8080 8080
并尝试通过以下方式达到目标:
http://localhost:8080
检查问题是否与 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