首页 文章

Kubernetes Helm Nginx-ingress正在打“默认后端 - 404”

提问于
浏览
1

请注意,我还在学习Kubernetes和Helm .

在运行Docker for Mac(边缘)的本地主机上使用Kubernetes群集在Helm上安装带有Helm的nginx-ingress .

具有以下内容:

helm install --name my-release stable/nginx-ingress

我从 curl localhost 收到以下回复

default backend - 404

这是个好消息,但从哪里开始 . 我想打一个服务/群集IP . Nginx中的Normaly我会把它放在conf文件中 . 在Helm Chart值中我可以看到它指的是:

controller:
5     name: controller
6     image:
7       repository: k8s.gcr.io/nginx-ingress-controller
…   
183   enabled: true
184 
185   name: default-backend
186   image:
187     repository: k8s.gcr.io/defaultbackend
188     tag: "1.3"

你知道它是如何工作的吗?

1 回答

  • 2

    Ingress概念将路由规则的配置外部化 . 这些规则不会将它们放在与代理一起使用的conf文件中,而是被视为在部署应用程序时部署的Kubernetes资源 . 使用@Omer Levi Hevroni指出的example,您可以在其 rules: 部分中拥有包含此规范的Ingress资源:

    - host: api.sample.com
        http:
          paths:
          - path: /
            backend:
              serviceName: hello-world-svc
              servicePort: 8080
    

    这是一个基于主机的规则,这意味着任何使用请求api.sample.com/(它假定DNS路由指向入口控制器)进入入口控制器的流量都应该发送到服务 hello-world-svc - 更具体地说到http://hello-world-svc:8080/ .

    此外,可以添加Ingress resources,或者根据不同的请求主机(例如anotherapi.sample.com这样的子域)或路径(例如api.sample.com/specialpath)将其扩展到不同的服务 . 两者都可以与 rules 规范一起使用,如:

    - host: subdomain1.example.com
        http:
          paths:
          - path: /path1
            backend:
              serviceName: s1
              servicePort: 80
          - path: /path1
            backend:
              serviceName: s2
              servicePort: 80
      - host: subdomain2.example.com
        http:
          paths:
          - path: /path1
            backend:
              serviceName: s3
              servicePort: 80
          - path: /path2
            backend:
              serviceName: s4
              servicePort: 80
    

    哪个会将http://subdomain1.example.com/path1指向内部URL http://s1:80/path1等 . 如果内部URL的最后一部分(在这种情况下为 path1 )不可取,那么rewrite-target annotation可以与nginx入口控制器一起使用,前提是Ingress资源注释为nginx类 .

    我怀疑你知道所有这一切,因为问题是从不久前开始的,但我认为填写答案会有所帮助 .

相关问题