我试图在Ingress上公开一个没有选择器的服务(使用Kubernetes官方Nginx控制器)。
没有选择器的服务在我将其设置为NodePort时工作正常,并且它使用我手动定义的端点。
但是,一旦我设置了指向此服务的Ingress资源,我就无法使其正常工作。
这就是Nginx抱怨的:
connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: example, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8181/", host: "example"
connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: example, request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8181/favicon.ico", host: "example", referrer: "http://example/"
这些是我的服务和Ingress资源:
apiVersion: v1
kind: Service
metadata:
name: example
labels:
app: example
spec:
ports:
- name: http
protocol: TCP
port: 8080
targetPort: http
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example
labels:
app: example
spec:
rules:
- host: myhostname
http:
paths:
- path: /
backend:
serviceName: example
servicePort: http
注意:我在部署后手动编辑服务的端点。但我不知道这会有什么不同。
有什么想法吗?
修改
我添加了一个带有选择器的附加服务,与另一个没有选择器的服务器并排运行。
当我让Ingress指向没有Selector的那个时,这是Nginx的上游:
upstream default-old-joey-app.example-no-selector {
least_conn;
server 127.0.0.1:8181 max_fails=1 fail_timeout=10s;
}
只要我将Ingress资源切换为指向带选择器的服务,Nginx的更新流就会更新为:
upstream default-old-joey-app.example-with-selector {
least_conn;
server 172.17.0.5:8080 max_fails=1 fail_timeout=10s;
}
这可能是Ingress控制器的一个问题吗?
答案 0 :(得分:-1)
在您的Ingress中,您在后端指示http
作为servicePort,而您的服务正在侦听端口8080.
像这样改变它应该有效:
backend:
serviceName: example
servicePort: 8080