我在我的Kubernetes集群中获得Nginx ingress控制器时遇到了一些问题。我已经根据https://kubernetes.github.io/ingress-nginx/deploy/创建了nginx-ingress部署、服务、角色等
我还部署了一个简单的hello-world
应用程序,它侦听端口8080
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: hello-world
namespace: default
spec:
selector:
matchLabels:
name: hello-world
template:
metadata:
labels:
name: hello-world
spec:
containers:
- name: hello-world
image: myrepo/hello-world
resources:
requests:
memory: 200Mi
cpu: 150m
limits:
cpu: 300m
ports:
- name: http
containerPort: 8080
protocol: TCP
并为它创建了一个服务
kind: Service
apiVersion: v1
metadata:
namespace: default
name: hello-world
spec:
selector:
app: hello-world
ports:
- name: server
port: 8080
最后,我创建了一个TLS密钥(my-tls-secret
),并按照说明部署了nginx入口。例如:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: hello-world
namespace: default
spec:
rules:
- host: hello-world.mydomain.com
http:
paths:
- path: /
backend:
serviceName: hello-world
servicePort: server
tls:
- hosts:
- hello-world.mydomain.com
secretName: my-tls-cert
但是,我无法访问我的应用程序,在日志中我看到
W0103 19:11:15.712062 6 controller.go:826] Service "default/hello-world" does not have any active Endpoint.
I0103 19:11:15.712254 6 controller.go:172] Configuration changes detected, backend reload required.
I0103 19:11:15.864774 6 controller.go:190] Backend successfully reloaded.
我不知道为什么它说Service "default/hello-world" does not have any active Endpoint
。我已经为traefik入口控制器使用了类似的服务定义,没有任何问题。
我希望我错过了一些明显的nginx入口。任何帮助你可以提供将不胜感激!
6条答案
按热度按时间bq9c1y661#
我发现我做错了什么。在我的应用程序定义中,我使用
name
作为选择器而在我的服务中,我使用的是
app
在将我的服务更新为使用
app
之后,它工作了7kjnsjlb2#
另一种可能发生的情况是,入口控制器的入口类与用于您的服务的入口资源清单中的入口类不匹配。
Nginx安装命令,简短示例:
入口资源规范,摘录:
moiiocjp3#
在我们的例子中,这是由于入口资源定义在与服务不同的名称空间上造成的。
bmvo0sr54#
在我的例子中,我在我的服务选择器中包含了一个“id”指令,它在部署元数据中丢失了,这阻止了端点控制器找到正确的Pod。相反的情况也会失败:
erhoui1w5#
在我的例子中,由于ImagePullError,服务指向的实际部署容器没有运行。一旦我解决了这个问题,容器开始运行,端点错误就消失了。
5jvtdoz26#
我在入口资源规范中写入了错误的主机域。