如何在nginx ingress中禁用外部访问的NodePorts

198次阅读
没有评论

问题描述

在一个使用 k3s 集群(版本:v1.24.4+k3s1)中,用户在 nginx ingress(使用 helm 部署:ingress-nginx/ingress-nginx)后面运行了多个服务。nginx ingress 会创建一个类型为 LoadBalancer 的控制器服务,该服务使用了两个额外的 NodePorts:31895/TCP24843/TCP。这使得该服务可以通过这两个端口从集群外部访问(除了端口 80443)。
用户有以下问题需要解决:
1. 为什么 nginx ingress 使用了这两个 NodePorts?
2. 如何禁用这两个 NodePorts 或禁止它们从集群外部访问?(每次创建服务时,这两个 NodePorts 都会随机分配)
用户尝试过设置 allocateLoadBalancerNodePortsfalse,但并没有成功。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

为什么使用 NodePorts?

NodePort 是 Kubernetes 服务的一种类型,它允许集群外部通过节点的 IP 地址和 NodePort 端口访问服务。在 nginx ingress 控制器中,这两个额外的 NodePorts(31895/TCP24843/TCP)是为了允许外部流量通过这些端口访问 Ingress 资源所定义的规则。这样可以将 HTTP 和 HTTPS 流量定向到适当的后端服务。

如何禁用 NodePorts 或限制外部访问?

要禁用这两个 NodePorts 或者限制从集群外部访问它们,可以采取以下步骤:

步骤 1:修改 Ingress Controller 的配置

  1. 找到你的 nginx ingress 控制器的配置文件或 Helm 部署值。
  2. 查找相关的配置项,可能是类似于 controller.service.nodePorts.httpcontroller.service.nodePorts.https 这样的设置。
  3. 将这些配置项的值设置为 null 或者删除它们,这将阻止控制器为这些协议分配 NodePorts。

步骤 2:更新现有的 Ingress 资源

如果你已经创建了 Ingress 资源并希望阻止流量通过这些 NodePorts,请按照以下步骤操作:

  1. 找到现有的 Ingress 资源。
  2. 对于每个需要更改的 Ingress 资源,将规则中的端口映射(80443)更改为你希望的端口。
  3. 更新 Ingress 资源,让它们使用新的端口映射。

请注意,禁用或更改 NodePorts 可能会影响外部访问和流量的传递,请确保在修改之前做好适当的测试和备份。

注意事项

在禁用 NodePorts 时,请注意以下几点:
– 如果你使用的是 Helm 部署,你可能需要通过 values.yaml 文件或 Helm 的命令行选项来设置相应的配置值。
– 请确保你的更改在控制器和 Ingress 资源中保持一致,以避免潜在的配置不一致问题。

总结

通过修改 nginx ingress 控制器的配置以及更新现有的 Ingress 资源,你可以禁用或限制 NodePorts 的外部访问。但在进行任何更改之前,请务必做好适当的备份和测试,以确保更改不会导致意外的问题。

正文完