当前位置: 首页 > 知识库问答 >
问题:

库伯内特斯入口:如何限制虚拟主机名包含用户自己的命名空间?

单于扬
2023-03-14

背景

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

问题

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

共有1个答案

卫劲
2023-03-14

在openshift 3.x文档中提到:

如果路由定义中没有提供主机名,那么OpenShift容器平台会自动为您生成一个主机名。生成的主机名的格式为:

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

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

不幸的是,据我所知,k8s和k8s nginx入口不支持这一点。

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

这里有一个你可能想看看的教程:kube变异webhook教程

您也可以尝试寻找支持您想要的功能的不同入口控制器。

另一个解决方案涉及取消开发人员创建入口对象的权限,只挑选一个人负责入口对象的创建和验证(这可能是个坏主意,但这是一个解决方案)。

 类似资料:
  • 我正在学习一些关于入口的知识。它由两部分组成: 入口资源:“您希望如何将请求路由到支持服务?” 入口控制器:“侦听Kubernetes API以获取入口资源。” 我在名称空间中部署了一个名为Ingres的入口控制器。我还部署了一个默认后端。现在我想部署一个应用程序(svc、POD的部署等)。 我是否需要在命名空间中部署此应用程序?对我来说,我必须为每个新应用程序部署一个新的入口资源,这似乎是合乎逻

  • 我已经研究Kubernetes几个星期了,并使用kube lego NGINX示例(https://github.com/jetstack/kube-lego)已使用DigitalOcean上的Rancher成功地将服务部署到Kubernetes群集。 我已经部署了示例静态站点、Wordpress、Laravel、Craft CMS等。所有这些都使用自定义命名空间、部署、秘密、具有外部注册表的容器

  • 我正在尝试使用helm图表部署我的应用程序。我已经将statefulSet定义为一种正在部署的类型。yaml并根据规范serviceName提供无头服务。来自部署的代码片段。yaml如下所示。 部署后,当我启动“kubectl get pods”时,其显示的POD名称为“MyApp-100-deployment-n”,其中n 如果我使用kubectl exec进入Pod,并触发“主机名”命令,我会

  • 我怎样才能使用入口呢?我尝试使用NodePort和--Target etPort=1001,我在servicePort中添加了80在。 kubectl公开部署测试--Target-port=1001--type=NodePort 我得到了错误 找不到后端-404 我使用的是正确的方法还是需要遵循其他方法?

  • 新来的。我想知道是否有人可以帮助我区分我可以用来识别入口控制器和通过YAML和服务识别入口的特征。我有一个预先存在的集群,我认为入口控制器可能是通过helm安装的,但我不确定。有没有办法了解helm在安装nginx ingress控制器时使用的yaml?

  • 我在这里做一个测试,需要使用Jenkins和库伯内特斯交付一个构建、测试和部署管道。 我正在使用Mac,并使用带有Ubuntu 18的虚拟盒创建了一个VM,并在那里安装了詹金斯。 我安装了Kubernetes (minukube ),但当我试图启动它时,我收到: “此计算机没有 VT-x/AMD/v 启用程序。在 BIOS 中启用它是强制性的” 阅读一些博客时,他们说VM内部的VM不是一个好的架构