我在 EC2 AWS 实例中设置 RKE 集群,但我在尝试设置 nginx 入口控制器时遇到问题,有时在尝试访问它时会出错。我的架构是这样的:
实例 #1 它只是一个在每个节点中执行负载均衡器的 nginx 服务器,#2 和 #3 是一个 RKE 节点都具有这些角色: - controlplane - worker - etcd
我已经部署了两个服务/部署。我试图设置一个 nginx 入口控制器,以根据路径将流量重定向到每个服务,但有时我只是得到 504 Gateway Time-out 而其他一个加载正确。使用 hey 进行小负载测试,我看到几乎 50% 的人得到了 504 错误。状态码分布:【200】102响应【504】98响应
调试 nginx-ingress 控制器我看到其中一个似乎无法访问服务,我认为出于这个原因有时我会收到 504 错误,但我不知道为什么。
2020/01/27 01:40:31 [error] 1767#1767: *128496 upstream timed out (110: Connection timed out) while connecting to upstream, client: 10.0.1.163, server: <host>, request: "GET /nginx HTTP/1.1", upstream: "http://10.42.1.4:80/", host: “<Host>"
Kubernetes 配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: system-deployment
labels:
app: system
spec:
replicas: 1
selector:
matchLabels:
app: system
template:
metadata:
labels:
app: system
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: inventory-deployment
labels:
app: inventory
spec:
replicas: 1
selector:
matchLabels:
app: inventory
template:
metadata:
labels:
app: inventory
spec:
containers:
- name: inventory-container
image: dockersamples/101-tutorial
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: system-service
spec:
selector:
app: system
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: inventory-service
spec:
selector:
app: inventory
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: root-ingress
annotations:
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: <host>
http:
paths:
- path: /nginx
backend:
serviceName: system-service
servicePort: 80
- path: /
backend:
serviceName: inventory-service
servicePort: 80
我的理论是入口控制器无法访问其他节点中的服务,因为我收到了 504 错误,但据我所知,集群中的任何节点都可以访问服务。有人知道这里会发生什么吗?
谢谢,