为什么我的入口控制器不将流量从我的外部 IP 路由到我集群中的服务?
Why isn't my ingress controller route traffic from my external IP to the service in my cluster?
我在 Digital Ocean 上有一个集群。 1 个主节点,2 个节点。
我将 Nginx 控制器与 Digital Ocean Load Balancer 一起使用。
我的 Ingress 服务中的三个项目工作正常。第四个我使用 Nginx 的地方没有。
有谁知道为什么?
这是配置。我遗漏了正在运行的第 1 到第 3 个部署的入口服务。如果需要我可以添加它们。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: hw1.example.com
http:
paths:
- backend:
serviceName: hello-kubernetes-first
servicePort: 80
- host: hw2.example.com
http:
paths:
- backend:
serviceName: hello-kubernetes-second
servicePort: 80
- host: hw3.example.com
http:
paths:
- backend:
serviceName: hello-kubernetes-third
servicePort: 80
- host: hw4.example.com
http:
paths:
- backend:
serviceName: hello-kubernetes-fourth
servicePort: 80
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes-fourth
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
selector:
app: hello-kubernetes-fourth
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes-fourth
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes-fourth
template:
metadata:
labels:
app: hello-kubernetes-fourth
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 8080
首先,如果你使用nginx镜像,容器Port应该是镜像的Dockerfile暴露的端口。
对于 nginx 图像,ContainerPort 应该是端口 80
https://hub.docker.com/layers/nginx/library/nginx/stable/images/sha256-cab8e4374e1e32bac58a8c7ae96c252cadcb1049545ed4bb3e3bfd5d087983b9
现在您应该通过从 minikube 节点访问 podip:containerPort 来测试 nginx 是否可用:
kubectl get po -o wide
hello-kubernetes-fourth-cb4fb668c-7tkd4 1/1 Running 0 25m 172.17.0.12
curl 172.17.0.12
在此之后,您应该修改服务的端口:targetPort 应该匹配 containerPort (80) 和端口 8080
现在通过服务URL:
访问Nginx
kubectl describe svc hello-kubernetes-fourth
curl ClusterIP:8080
如果确定,还修改入口的服务端口以匹配服务端口。不要忘记启用入口,因为它在 minikube 上默认是禁用的:
minikube addons enable ingress
* ingress was successfully enabled
ingress pod 启动后,并在主机中添加 MINIKUBEIP hw4.example.com /etc/hosts,您应该能够从主机 curl:
curl hw4.example.com
部署配置不正确。如下所示更新 YAML
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes-fourth
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
selector:
app: hello-kubernetes-fourth
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes-fourth
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes-fourth
template:
metadata:
labels:
app: hello-kubernetes-fourth
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
进入 nginx pod 并验证您是否能够访问该服务并获得响应
卷曲http://hello-kubernetes-fourth
那么您应该可以从入口访问该服务。
我在 Digital Ocean 上有一个集群。 1 个主节点,2 个节点。 我将 Nginx 控制器与 Digital Ocean Load Balancer 一起使用。 我的 Ingress 服务中的三个项目工作正常。第四个我使用 Nginx 的地方没有。 有谁知道为什么?
这是配置。我遗漏了正在运行的第 1 到第 3 个部署的入口服务。如果需要我可以添加它们。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: hw1.example.com
http:
paths:
- backend:
serviceName: hello-kubernetes-first
servicePort: 80
- host: hw2.example.com
http:
paths:
- backend:
serviceName: hello-kubernetes-second
servicePort: 80
- host: hw3.example.com
http:
paths:
- backend:
serviceName: hello-kubernetes-third
servicePort: 80
- host: hw4.example.com
http:
paths:
- backend:
serviceName: hello-kubernetes-fourth
servicePort: 80
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes-fourth
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
selector:
app: hello-kubernetes-fourth
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes-fourth
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes-fourth
template:
metadata:
labels:
app: hello-kubernetes-fourth
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 8080
首先,如果你使用nginx镜像,容器Port应该是镜像的Dockerfile暴露的端口。 对于 nginx 图像,ContainerPort 应该是端口 80 https://hub.docker.com/layers/nginx/library/nginx/stable/images/sha256-cab8e4374e1e32bac58a8c7ae96c252cadcb1049545ed4bb3e3bfd5d087983b9
现在您应该通过从 minikube 节点访问 podip:containerPort 来测试 nginx 是否可用:
kubectl get po -o wide
hello-kubernetes-fourth-cb4fb668c-7tkd4 1/1 Running 0 25m 172.17.0.12
curl 172.17.0.12
在此之后,您应该修改服务的端口:targetPort 应该匹配 containerPort (80) 和端口 8080 现在通过服务URL:
访问Nginxkubectl describe svc hello-kubernetes-fourth
curl ClusterIP:8080
如果确定,还修改入口的服务端口以匹配服务端口。不要忘记启用入口,因为它在 minikube 上默认是禁用的:
minikube addons enable ingress
* ingress was successfully enabled
ingress pod 启动后,并在主机中添加 MINIKUBEIP hw4.example.com /etc/hosts,您应该能够从主机 curl:
curl hw4.example.com
部署配置不正确。如下所示更新 YAML
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes-fourth
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
selector:
app: hello-kubernetes-fourth
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes-fourth
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes-fourth
template:
metadata:
labels:
app: hello-kubernetes-fourth
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
进入 nginx pod 并验证您是否能够访问该服务并获得响应
卷曲http://hello-kubernetes-fourth
那么您应该可以从入口访问该服务。