有和没有主机的入口

Dan*_*Dan 3 kubernetes-ingress nginx-ingress

真的很难理解和调试 ingress 的规则。谁能分享一个好的参考?

问题是入口如何在不指定主机的情况下工作?

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
         nginx.ingress.kubernetes.io/force-ssl-redirect: \"false\"
      name: my-app
    spec:
      rules:
        http:
          paths:
          - backend:
            path: /
              serviceName: my-app
              servicePort: http
Run Code Online (Sandbox Code Playgroud)

分配主机(例如- host: aws-dsn-name.org)后,它不起作用。更改路径后path: /v1/也不起作用:(。

如何调试/检查映射是否正确完成?

此外,何时使用extensions/v1beta1networking.k8s.io/v1beta1

Fah*_*eem 6

有可用的很不错的文档这里入门。它可能不会涵盖所有方面,但确实可以回答您的问题。Ingress 控制器基本上是一个反向代理,并遵循类似的想法。

  1. 您共享的代码段称为 single backend 或single service ingress/路径将是默认的。这是唯一的条目,因此暴露端口上的每个请求都将由绑定服务提供服务。

  2. 主机入口;host: aws-dns-name.org只要您的 DNS 解析aws-dns-name.org为集群中节点的 IP 或集群前端的 LB,就应该可以工作。对该 DNS 条目执行 ping 操作,看看它是否正确解析到目标 IP。尝试curl -H 'Host: aws-dns-name.org' IP_Address验证入口是否正确响应。NGINX 使用Host标头来决定使用哪个后端服务。如果您使用不同的Host条目向 IP 发送流量,它将无法连接到正确的服务,并将提供default-backend

  3. 如果你正在做基于路径的路由,它也可以与基于主机的路由相结合,NGINX 将根据截获的路径路由到正确的后端服务。但是,就像任何其他反向代理一样,它会将请求发送到指定的路径 (http://service:80/v1/)。您的应用程序可能没有在/v1/路径上侦听,因此您最终会得到 404。使用rewrite-target注释让 NGINX 知道您在/.

  4. API 资源版本确实会在 K8s 中切换,并且很难跟上。现在正确的注释是networking.k8s.io/v1beta1networking.k8s.io/v1从 1.19 开始),即使旧版本正在工作但最终将停止工作。我见过集群升级中断应用程序,因为有人忘记更新 API 版本。