You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kubernetes中Traefik Ingress Controller与后端Nifi服务的通信加密配置

我来帮你梳理下这个K8S环境里Traefik和Nifi加密通信的配置关键点,刚好我之前做过类似的部署:

核心配置说明

1. Ingress YAML是必须要配置的

你需要在Ingress资源里明确两件事:一是告诉Traefik用HTTPS转发请求到Nifi,二是配置Traefik对Nifi后端证书的验证规则。

具体来说,要用到Traefik的专属Ingress注解:

  • 首先指定后端协议为HTTPS,避免Traefik默认用HTTP发送请求:
    annotations:
      traefik.ingress.kubernetes.io/backend-protocol: HTTPS
    
  • 然后配置后端证书的验证机制——这里推荐用Traefik的ServerTransport自定义资源,来关联存储CA根证书的Secret,这样Traefik就能验证Nifi证书的合法性。

给你一个完整的示例片段:

Ingress资源

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nifi-ingress
  annotations:
    traefik.ingress.kubernetes.io/backend-protocol: HTTPS
    # 关联自定义的ServerTransport资源
    traefik.ingress.kubernetes.io/servertransport: default/nifi-server-transport
spec:
  # 这里配置Traefik对外的公证书(你已经弄好的那个)
  tls:
    - hosts:
        - your-nifi-public-domain.com
      secretName: traefik-public-cert-secret
  rules:
    - host: your-nifi-public-domain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nifi-service
                port:
                  number: 443

对应的ServerTransport资源

这个资源用来定义Traefik和后端通信的TLS规则,比如信任哪个CA根证书:

apiVersion: traefik.containo.us/v1alpha1
kind: ServerTransport
metadata:
  name: nifi-server-transport
  namespace: default
spec:
  # Nifi服务的内部域名,要和Nifi证书里的SAN/CN匹配
  serverName: nifi-service.default.svc.cluster.local
  # 引用存储CA根证书的Secret
  rootCAsSecrets:
    - nifi-ca-root-secret

2. 证书链配置:必须用CA根证书签发Nifi证书并导入Traefik

没错,这个步骤是绕不开的——因为Traefik默认只会信任系统级的CA证书,而Nifi用自签名证书的话,Traefik会直接拒绝连接,所以必须:

  1. 生成自签名CA根证书:用openssl就能搞定,比如:
    openssl req -x509 -sha256 -days 3650 -newkey rsa:2048 -keyout ca.key -out ca.crt -nodes -subj "/CN=Nifi Internal CA"
    
  2. 用这个CA签发Nifi的服务证书:重点是证书的SANs(Subject Alternative Names)必须包含Nifi服务的内部域名(比如nifi-service.default.svc.cluster.local),否则Traefik会因为域名不匹配报错。
  3. 把CA根证书存入K8S Secret
    kubectl create secret generic nifi-ca-root-secret --from-file=ca.crt=./ca.crt
    
  4. 配置Nifi使用签发的证书:把Nifi的证书和密钥挂载到Pod里,修改Nifi的配置启用HTTPS,监听443端口。

几个容易踩坑的点

  • 一定要确保Nifi证书的SANs包含内部服务域名,不然Traefik的证书验证会失败。
  • ServerTransport资源和Ingress要在同一个命名空间,或者给Traefik配置RBAC权限跨命名空间读取Secret。
  • 如果你的Traefik版本比较老,注解或者CRD的格式可能有差异,记得对应版本的文档调整。

内容的提问来源于stack exchange,提问作者Olivier

火山引擎 最新活动