0

背景

我们有一台带有一个外部 IP、microk8s 和 k8s 入口 (nginx) 的服务器,为基于名称的虚拟主机配置。该机器旨在作为多个开发人员测试容器技术的游乐场。路由名称冲突的问题很快出现,两个用户试图设置相同的路由(如测试或开发)。一种解决方案是在主机名中包含名称空间,但用户仍然必须合作(而不是使用其他人的名称空间)。

问题

如何限制用户生成的主机名(使用 Ingress 配置文件设置)在基于名称的虚拟主机中仅包含用户自己的命名空间(最好使用 Nginx 入口)?这似乎是可能的,因为这就是我们公司的 Openshift 路由(包括命名空间的自动生成的主机名)的工作方式:如果没有访问权限(由 RBAC 控制),就不可能在命名空间中创建路由。

4

1 回答 1

1

openshift 3.x 文档中提到:

如果主机名没有作为路由定义的一部分提供,OpenShift Container Platform 会自动为您生成一个。生成的主机名格式为:

<route-name>[-<namespace>].<suffix>

所以我想你想要做的就是做同样的事情;未提供主机名时生成主机名。

不幸的是,据我所知,k8s 和 k8s nginx 入口不支持此功能。

您可能想要做的是创建一个mutating webhook以在应用于 k8s 时对运行中的对象进行变异(例如,如果未提供主机字段,它可以生成一个主机字段),或者使用验证 webhook来验证对象是否符合要求。

这是您可能想要查看的教程:kube-mutating-webhook-tutorial

您还可以尝试找到支持您想要的功能的其他入口控制器。

另一种解决方案涉及从开发人员那里删除创建入口对象的访问权限,并只选择一个负责创建和验证入口对象的人(可能是个坏主意,但这是一个解决方案)。

于 2021-05-05T12:13:10.127 回答