![](/img/trans.png)
[英]Loadbalancer IP and Ingress IP status is pending in kubernetes
[英]Kubernetes Ingress Loadbalancer IP
在带有 Nginx-ingress-controller 的 K8s 设置中,我们可以同时使用入口 LB IP 和域名来访问应用程序吗? 我已经使用带有“example.local”的虚拟域名配置了一个入口资源。 这工作正常,当我使用此域名访问应用程序时。 但是,当我使用相应的 LB IP 访问它时,它返回 404 page not found。
~]# kubectl describe ingress
Name: hello-world-ing
Labels: <none>
Namespace: default
Address: 192.168.122.241
Ingress Class: <none>
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
example.local
/ apache:80 (10.32.0.4:80)
Annotations: kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 2m8s (x10 over 83m) nginx-ingress-controller Scheduled for sync
现在,当我使用域名访问后端应用程序时,它可以正常工作。 但是,如果我使用 IP “192.168.122.241”,它会返回 404 page not found。
如果我使用 IP “192.168.122.241”,它会返回 404 page not found。
回答上述问题,您必须从入口 YAML 配置中删除主机部分。
正如您提到的example.local作为主机 Nginx 入口将尝试找到路径,但是您尝试使用 IP 直接访问它,它不会解决它并抛出404 not found 错误。
尝试不使用主机
示例:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- http:
paths:
- path: /apple
backend:
serviceName: apple-service
servicePort: 5678
- path: /banana
backend:
serviceName: banana-service
servicePort: 5678
您可以在官方文档上阅读有关解决方案的更多信息: https://kubernetes.io/docs/concepts/services-networking/ingress/#single-service-ingress
使用主机名进行路由总是更好,但是如果您需要,您可以使用保留的外部 IP 和入口。
我相信这是因为入口只有hostname
规则,而不是 IP 地址规则。 也许,如果您添加另一个基于 IP 地址转发流量的入口规则,您也将能够基于 IP 地址进行路由。
但是,我非常不鼓励您这样做。 这是因为集群中的 IP 地址分配几乎总是在变化,当你的 Ingress 的 IP 地址发生变化时,这会导致你的 Ingress 规则不正确,所以不要使用这样的配置。 但是为了学习,您可以添加它来配置您的路由。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.