Kubernetes 的 Ingress 对 nginx-ingress-controller 没有影响
Kubernetes's Ingress has no effect on nginx-ingress-controller
我已经部署了nginx :
kubectl run nginx --image=nginx
并且我暴露了nginx
kubectl expose deployment nginx --port 80 --type NodePort
并且当执行这个命令时
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.254.237.40 <none> 80:31111/TCP 22s
jenkins ClusterIP 10.254.118.81 <none> 8080/TCP 45m
并且我部署了 Ingress 文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /jenkins
backend:
serviceName: jenkins
servicePort: 8080
并了解入口的输出
-> kubectl apply -f ingress.yaml
ingress.extensions "nginx" configured
-> kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
nginx example.com 80 40m
而当浏览器
http://Node-IP:31111
Returns Nginx's Welcome Page
当浏览器
http://http://Node-IP:31111/jenkins
Returns 404 Not Found
有什么不明白的吗?
以及如何解决这个问题?
谢谢 :D
如果您想访问 jenkins 端点,则不应使用 Node-IP
。在这种情况下,您需要使用 example.com
。但是你需要第 7 层主机 header 以便入口能够理解它。要测试它,您需要修改它。有几种方法可以做到:
尝试运行:
curl -H 'Host: example.com' http://Node-IP:31111/jenkins
修改 /etc/hosts
以在您的计算机上有一个条目 Node-IP example.com
文件,然后浏览至:
http://example.com:31111/jenkins
请注意,您正在使用 NodePort
服务。您可以使用 LoadBalancer
类型来避免指定端口。 (使用默认端口 80)。您也可以使用 clusterIP 10.254.237.40
,但要访问它,您必须在 Kubernetes 集群中的一台机器中。
您的部署方式似乎不包含在 kubernetes 中监视 Ingress 资源所需的功能。
我建议您按照官方建议的方式部署 nginx-ingress:https://kubernetes.github.io/ingress-nginx/deploy/#generic-deployment
个人推荐helm图表选项:https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
NGINX Ingress controller can be installed via Helm using the chart
stable/nginx-ingress from the official charts repository. To install
the chart with the release name my-nginx:
helm install stable/nginx-ingress --name my-nginx If the kubernetes
cluster has RBAC enabled, then run:
helm install stable/nginx-ingress --name my-nginx --set
rbac.create=true Detect installed version:
POD_NAME=$(kubectl get pods -l app.kubernetes.io/name=ingress-nginx -o
jsonpath='{.items[0].metadata.name}') kubectl exec -it $POD_NAME --
/nginx-ingress-controller --version
此外,请参阅@Rico 关于传递正确主机的上述回答 headers:
Try running:
curl -H 'Host: example.com' http://Node-IP:31111/jenkins
Modify the /etc/hosts
to have an entry Node-IP example.com
file on your machine and just browse to:
http://example.com:31111/jenkins
我已经部署了nginx :
kubectl run nginx --image=nginx
并且我暴露了nginx
kubectl expose deployment nginx --port 80 --type NodePort
并且当执行这个命令时
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.254.237.40 <none> 80:31111/TCP 22s
jenkins ClusterIP 10.254.118.81 <none> 8080/TCP 45m
并且我部署了 Ingress 文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /jenkins
backend:
serviceName: jenkins
servicePort: 8080
并了解入口的输出
-> kubectl apply -f ingress.yaml
ingress.extensions "nginx" configured
-> kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
nginx example.com 80 40m
而当浏览器
http://Node-IP:31111
Returns Nginx's Welcome Page
当浏览器
http://http://Node-IP:31111/jenkins
Returns 404 Not Found
有什么不明白的吗?
以及如何解决这个问题?
谢谢 :D
如果您想访问 jenkins 端点,则不应使用 Node-IP
。在这种情况下,您需要使用 example.com
。但是你需要第 7 层主机 header 以便入口能够理解它。要测试它,您需要修改它。有几种方法可以做到:
尝试运行:
curl -H 'Host: example.com' http://Node-IP:31111/jenkins
修改
/etc/hosts
以在您的计算机上有一个条目Node-IP example.com
文件,然后浏览至:http://example.com:31111/jenkins
请注意,您正在使用 NodePort
服务。您可以使用 LoadBalancer
类型来避免指定端口。 (使用默认端口 80)。您也可以使用 clusterIP 10.254.237.40
,但要访问它,您必须在 Kubernetes 集群中的一台机器中。
您的部署方式似乎不包含在 kubernetes 中监视 Ingress 资源所需的功能。
我建议您按照官方建议的方式部署 nginx-ingress:https://kubernetes.github.io/ingress-nginx/deploy/#generic-deployment
个人推荐helm图表选项:https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
NGINX Ingress controller can be installed via Helm using the chart stable/nginx-ingress from the official charts repository. To install the chart with the release name my-nginx:
helm install stable/nginx-ingress --name my-nginx If the kubernetes cluster has RBAC enabled, then run:
helm install stable/nginx-ingress --name my-nginx --set rbac.create=true Detect installed version:
POD_NAME=$(kubectl get pods -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}') kubectl exec -it $POD_NAME -- /nginx-ingress-controller --version
此外,请参阅@Rico 关于传递正确主机的上述回答 headers:
Try running:
curl -H 'Host: example.com' http://Node-IP:31111/jenkins
Modify the
/etc/hosts
to have an entryNode-IP example.com
file on your machine and just browse to:http://example.com:31111/jenkins