kubernetes - 没有选择器的服务上的 Kubernetes Nginx 入口控制器
问题描述
我正在尝试公开一个在 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/"
这些是我的服务和入口资源:
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
注意:我在部署后手动编辑服务的端点。但我不明白这有什么不同。
有任何想法吗?
编辑:
我添加了一个带有选择器的附加服务,与另一个没有选择器的服务并排运行。
当我让入口指向没有选择器的入口时,这是 Nginx 的上游:
upstream default-old-joey-app.example-no-selector {
least_conn;
server 127.0.0.1:8181 max_fails=1 fail_timeout=10s;
}
一旦我将 Ingress 资源切换为使用 Selector 指向服务,Nginx 的上游更新为:
upstream default-old-joey-app.example-with-selector {
least_conn;
server 172.17.0.5:8080 max_fails=1 fail_timeout=10s;
}
这可能是入口控制器的问题吗?
解决方案
在您的 Ingress 中,您http
在后端指示为 servicePort,而您的服务正在侦听端口 8080。
像这样更改它,它应该可以工作:
backend:
serviceName: example
servicePort: 8080
推荐阅读
- python - 无法设置 PointField 默认值
- html - Div 不包含内容
- java - 为什么擦除仍然允许覆盖/实现?
- react-native - React Native:如何检测功能组件将卸载?
- android - CameraX CameraView 中是否存在错误,因为它不起作用?
- javascript - Axios 使用 Reactjs 发布 - 春季启动
- android - 在 Kotlin 的泛型函数中,有什么替代方案可以替代或使用多个约束边界?
- swift - 测验应用程序的回答按钮闪烁动画
- r - s3 方法定义与另一个包的 s4 方法混淆
- oracle - PL/SQL: SQL 语句被忽略和 PL/SQL: ORA-00911: 无效字符