从 Ingress NGINX 迁移到 Pomerium Ingress Controller
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 不同:
- HTTPS 为强制要求 – 所有路由必须使用 TLS。
- 必须指定策略 – 即使是宽松的策略也需要明确声明。
这些默认设置开箱即用地强化了安全,但您可以配置宽松的策略,使其表现得像传统的反向代理。
简单迁移示例
下面是典型的 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
配置几乎相同——只需将 ingressClassName 从 nginx 改为 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 都是从传统反向代理模式自然演进的理想选择。先使用熟悉的方式,上手后再逐步增强安全。
了解更多: 并查看部署文档获取详细说明。