Proxy Kubernetes上入口控制器(Traefik)和后端服务之间的安全通信

Proxy Kubernetes上入口控制器(Traefik)和后端服务之间的安全通信,proxy,kubernetes,apache-nifi,traefik,kubernetes-ingress,Proxy,Kubernetes,Apache Nifi,Traefik,Kubernetes Ingress,我试图在Kubernetes集群中,在Traefik代理后面保护Nifi。两者都作为K8S中的服务运行。Traefik由公共证书进行保护。我希望它将调用重定向到nifi,同时保护Traefik(作为入口控制器)和后端pods:nifi之间的通信 看起来安全确认应该存在于我的入口YAML描述符中。看起来我应该发出一个CA根来生成Nifi自签名证书,并将此CA根加载到Traefik中,这样它就可以在与Nifi握手时验证Nifi发送的证书 但是。。。我不知道1)这是否是一个好方法,2)我如何使用CA根

我试图在Kubernetes集群中,在Traefik代理后面保护Nifi。两者都作为K8S中的服务运行。Traefik由公共证书进行保护。我希望它将调用重定向到nifi,同时保护Traefik(作为入口控制器)和后端pods:nifi之间的通信

看起来安全确认应该存在于我的入口YAML描述符中。看起来我应该发出一个CA根来生成Nifi自签名证书,并将此CA根加载到Traefik中,这样它就可以在与Nifi握手时验证Nifi发送的证书

但是。。。我不知道1)这是否是一个好方法,2)我如何使用CA根为NiFi生成存储(信任,…),3)我应该如何设置YAML(
unsecureskipverify
似乎不受支持,…)

提前,谢谢你的帮助

干杯


Olivier

我也有同样的问题,可以用
unsecureskipverify
标志解决它。
traefik的问题是,NiFi从traefik获取请求并将其自签名证书发送回traefik进行握手。Traefik不接受它,因此握手失败,导致NiFi中出现
bad_证书
异常(具有loglevel
DEBUG
,因此您必须更改
logback.xml
文件)

因此,一种解决方案是将自签名证书添加到traefik,这在目前是不可能的

另一个解决方案是,在不“不安全”现有traefik的情况下,在traefik和NiFi之间添加一个
nginx
。因此,traefik使用nginx谈论HTTP
HTTP
,nginx使用NiFi谈论HTTPS
HTTPS
(这将是我尝试的下一件事)

或者您可以在traefik中设置
unsecureskipverify
标志,就像我在
daemonset.yaml中所做的那样:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  creationTimestamp: 2018-06-21T16:18:46Z
  generation: 4
  labels:
    k8s-app: traefik-internal
    release: infrastructure
  name: traefik-internal
  namespace: infrastructure
  resourceVersion: "18860064"
  selfLink: /apis/extensions/v1beta1/namespaces/infrastructure/daemonsets/traefik-internal
  uid: c64a20e1-776e-11f8-be83-42010a9c0ff6
spec:
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: traefik-internal
      name: traefik-internal
      release: infrastructure
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: traefik-internal
        name: traefik-internal
        release: infrastructure
    spec:
      containers:
      - args:
        - --api
        - --ping
        - --defaultEntryPoints=http,https
        - --logLevel=INFO
        - --accessLog
        - --kubernetes
        - --kubernetes.ingressClass=traefik-internal
        - --metrics.prometheus=true
        - --entryPoints=Name:https Address::443 TLS:/certs/cert.pem,/certs/cert.key
          CA:/certs/clientca.pem
        - --entryPoints=Name:http Address::80 Redirect.EntryPoint:https
        - --insecureSkipVerify=true
        image: traefik:1.6.0-rc6-alpine
        imagePullPolicy: IfNotPresent
        name: traefik-internal
        resources: {}
        securityContext:
          privileged: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /certs
          name: traefik-internal-certs
          readOnly: true
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: sa-traefik
      serviceAccountName: sa-traefik
      terminationGracePeriodSeconds: 60
      volumes:
      - name: traefik-internal-certs
        secret:
          defaultMode: 420
          secretName: traefik-internal
  templateGeneration: 4
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1
    type: RollingUpdate
status:
  currentNumberScheduled: 3
  desiredNumberScheduled: 3
  numberAvailable: 3
  numberMisscheduled: 0
  numberReady: 3
  observedGeneration: 4
  updatedNumberScheduled: 3
spec.containers.args
中的
unsecureskipverify
标志已更改


希望有帮助

我不熟悉traefik或Ingress控制器,但对于Apache NiFi,您可以使用附带的
tls toolkit
生成本地CA,生成并签署任意数量的节点和客户端证书,并将它们全部放入安全的JKS密钥库和信任库中,以便于部署。是的,谢谢你@Andy,但这并不能解决问题。我(当然)使用NiFi
tls工具包
,但这会生成自签名证书。所以我需要在Traefik/Ingress中接受此证书。我不知道如何在K8S中实现这一点。您可以为NiFi生成由外部实体签名的证书,也可以使用NiFi自签名CA证书并将其导入Traefik truststore。我不确定,但我会查看traefik.yaml文件,看看是否有外部信任库的配置值,或者它是否标识了您需要将CA公共证书导入的现有信任库文件。@Olivier您有什么进展吗?我也有同样的问题。在NiFi中,我在握手过程中收到了一个
错误的\u证书
异常。