如何使用一个主机名在同一个kubernetes集群上部署多个前端应用程序



我有3个部署在Kubernetes上的angular应用程序。我试图用一个主机名和不同的路径运行所有3个。这是我的入口。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
name: test-ingress-deployment
namespace: my-namespace
spec:
tls:
- hosts:
- dns-name.eastus.cloudapp.azure.com
secretName: aks-ingress-tls
rules:
- host: dns-name.eastus.cloudapp.azure.com
http:
paths:
- backend:
serviceName: ui-svc
servicePort: 80
path: /(.*)
- backend:
serviceName: ui-svc-one
servicePort: 80
path: /one/?(.*)
- backend:
serviceName: ui-svc-two
servicePort: 80
path: /two/?(.*)

所有这3个服务都在不同的名称空间中。在应用ingress之后,我尝试达到的每个端点都会得到503。

关于这方面的文档很少,至少除了Github问题之外,我找不到其他东西来揭示这个问题。但据我所知,K8中有意避免跨命名空间访问,这将是特权升级攻击的主要来源。

据我所知,你有两个选择:

  1. 您可以在kube-system命名空间中运行ingress和ingress控制器。但不建议这样做,因为kube-system仅适用于K8s组件,而且很可能会引起安全问题
  2. 你可以在你的服务所在的命名空间中有入口。但你需要一个入口控制器,它允许合并并非所有支持afaik的规则

可能有更多的解决方案,也许有更深入的K8s知识的人可以对此有更多的了解。

最新更新