从 Ingress NGINX 迁移到 Pomerium Ingress Controller

发布: (2025年12月6日 GMT+8 09:57)
5 min read
原文: Dev.to

Source: Dev.to

Kubernetes 社区宣布 Ingress NGINX 将于 2026 年 3 月停止维护。在此日期之后,将不再有更新、错误修复或安全补丁。现有部署仍能工作,但在没有安全更新的情况下运行风险较大,且不会再添加新功能。

许多 Kubernetes 运维人员正评估社区 Ingress NGINX 控制器的替代方案。Pomerium Ingress Controller 提供了一条有吸引力的迁移路径,具备您熟悉的反向代理功能,并可选的零信任能力,您可以逐步采用,而无需立即彻底改造现有环境。

为什么考虑 Pomerium?

虽然已有多种优秀的 Ingress 控制器可供选择,Pomerium 具备以下优势:

  • 与 Ingress NGINX 相同的反向代理行为。
  • 内置零信任特性,可逐步启用。
  • 核心和控制器均为开源,避免供应商锁定。

开始之前

本指南假设您已经:

  • 安装了 Pomerium。
  • 安装了 Pomerium Ingress Controller。
  • 配置了 TLS 证书(Pomerium 要求所有路由使用 HTTPS)。
  • 对 Kubernetes Ingress 资源有基本了解。

有哪些不同?

Pomerium 有两个关键要求与 NGINX 不同:

  1. HTTPS 为强制要求 – 所有路由必须使用 TLS。
  2. 必须指定策略 – 即使是宽松的策略也需要明确声明。

这些默认设置开箱即用地强化了安全,但您可以配置宽松的策略,使其表现得像传统的反向代理。

简单迁移示例

下面是典型的 Ingress NGINX 配置及其对应的 Pomerium 配置。

# Ingress NGINX → Pomerium Ingress Controller
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  annotations:
    ingress.pomerium.io/policy: |
      - allow:
          any: true
spec:
  ingressClassName: pomerium   # changed from nginx
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-service
            port:
              number: 80
  tls:
  - hosts:
    - app.example.com
    secretName: app-tls-cert

配置几乎相同——只需将 ingressClassNamenginx 改为 pomerium,并添加一个基础策略。any: true 策略告诉 Pomerium 允许所有请求通过,不施加访问限制,等同于传统的反向代理。

基本反向代理功能的策略选项

为了实现与 Ingress NGINX 默认行为相匹配的直接迁移,您可以选择以下几种策略:

选项 1:允许任何请求(最接近 Ingress NGINX 默认)

ingress.pomerium.io/policy: |
  - allow:
      any: true

选项 2:真正的公开访问(注解快捷方式)

ingress.pomerium.io/allow_public_unauthenticated_access: "true"

选项 3:任何已认证用户(基础认证)

ingress.pomerium.io/allow_any_authenticated_user: "true"

TLS 证书管理

由于 Pomerium 要求使用 HTTPS,建议使用 cert‑manager 实现证书的自动化签发。Pomerium Ingress Controller 与 cert‑manager 完美集成:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    ingress.pomerium.io/policy: |
      - allow:
          any: true
spec:
  ingressClassName: pomerium
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-service
            port:
              number: 80
  tls:
  - hosts:
    - app.example.com
    secretName: app-tls-cert   # cert‑manager will create this

从简单开始,准备好后再引入零信任

您可以先使用宽松的策略,随后根据用户身份、设备状态、请求上下文或其他因素替换为细粒度规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  annotations:
    ingress.pomerium.io/policy: |
      - allow:
          and:
            - domain:
                is: example.com
spec:
  ingressClassName: pomerium
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-service
            port:
              number: 80
  tls:
  - hosts:
    - app.example.com
    secretName: app-tls-cert

入门指南

面对 2026 年 3 月的退役截止日期,您有足够的时间仔细规划迁移。Pomerium Ingress Controller 的安装过程简洁且文档完善。迁移期间可以并行运行两个控制器,逐步将服务切换过去并验证功能。

无论您是寻求可持续的长期解决方案,还是为零信任的未来做准备,Pomerium Ingress Controller 都是从传统反向代理模式自然演进的理想选择。先使用熟悉的方式,上手后再逐步增强安全。

了解更多: 并查看部署文档获取详细说明。

Back to Blog

相关文章

阅读更多 »