我正在使用 K3S 学习 Kubernetes。由于一些项目限制,我使用的是Traefik ingress。 (之前我使用的是 nginx ingress。)
我正在尝试使用“扇出”方法在入口后面部署一些 Pod。例如,我必须容器 CX 和 CY,每个容器都有自己的 http 端点,定义时没有前缀,例如/api、/data、/ 等。两个容器将在同一主机上运行。默认的 kubernetes 行为是将整个路径转发到容器,因此如果我在 /CX 处有 CX,那么当我 ping url/CX 时 - 容器会看到路径 /CX - 这意味着我必须重新定义容器中的所有路径为 /CX/api、/CX/data 等
当我使用nginx时,我可以访问:
ingress:
enabled: true
className: "nginx"
#className: "traefik"
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host:
paths:
- path: /postgres(/|$)(.*)
pathType: ImplementationSpecific
这会重写路径。 Traefik 有这方面的中间件(但很难工作。)
我是否缺少为 Kubernetes 设计的 http 服务的基本设计原则?对我来说这似乎是一个基本问题,但对路径重写的支持相当有限。我应该以不同的方式设计我的容器、pod 或服务吗?
您有 2 个选择。
使用入口控制器功能重写您的路径。在本例中为 traefik 中间件。
为您拥有的每个应用程序(例如 CX.yourdomain.com)定义新的 DNS 记录,并直接使用这些地址作为入口主机,无需重写路径。