因此,我有一个入口 Controller 将流量路由到三个不同的服务,但是只有一个在工作,其他所有都返回503。
INGRESS YAML
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
namespace: dev
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
rules:
- host: localhost
http:
paths:
- path: /equip
backend:
serviceName: web-equip-svc-2
servicePort: 18001
- path: /hello
backend:
serviceName: hello-service
servicePort: 80
- path: /equip-ws
backend:
serviceName: web-equip-svc-2
servicePort: 18000
工作SVC YAML
apiVersion: v1
kind: Service
metadata:
name: hello-service
namespace: linkerd-test
labels:
app: hello
spec:
type: ClusterIP
selector:
app: hello
ports:
- port: 80
targetPort: 8080
protocol: TCP
不适用于SVC YAML
---
apiVersion: v1
kind: Service
metadata:
name: web-equip-svc-2
namespace: dev
labels:
app: equipment-service
spec:
type: ClusterIP
selector:
app: equipment-service
ports:
- name: "http"
port: 18001
targetPort: 8080
protocol: TCP
- name: "websocket"
port: 18000
targetPort: 8080
protocol: TCP
因此,我已经尝试过将注释从Ingress更改,将svc从clusterIP更改为loadBalancer ...并没有任何效果,欢迎任何帮助
最佳答案
如果可以,您应该将服务保留为ClusterIP。入口 Controller 的重点是使集群具有一个集中式入口。
首先尝试
首先独立测试您的服务。 (两个不起作用)。执行到另一个正在运行的pod中,然后执行以下操作:curl http://web-equip-svc-2:18001
,看看是否收到直接返回服务而不是通过入口返回的响应。如果一切正常,则说明入口规则配置和/或 Controller 存在问题。
如果它不起作用,那么您只知道运行这两个服务的实际容器/ pods ,就可以集中精力解决该问题。
尝试第二件事
简化您的入口规则。首先删除/equip-ws
的路径,只保留/hello
和/equip
的路径。
- path: /equip-ws
backend:
serviceName: web-equip-svc-2
servicePort: 18000
然后在更改了简化的入口规则的情况下再次测试
http://localhost/hello
和http://localhost/equip
。如果这行得通,那么您知道入口规则中的两个装备路径正在引起问题,您可以在那里解决冲突/问题。