繁体   English   中英

Kubernetes 入口负载均衡器 IP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM