我正在尝试在 Traefik 代理后面的 Kubernetes 集群中保护 Nifi。两者都在 K8S 中作为服务运行。 Traefik 使用公共(public)证书进行保护。我希望它将调用重定向到 nifi,同时保护 Traefik(作为入口 Controller )和后端 pod 之间的通信:Nifi。
看起来安全配置应该存在于我的 Ingress YAML 描述符中。看起来我应该发出一个 CA 根来生成 Nifi 自签名证书并将这个 CA 根加载到 Traefik 中,这样它就可以在与它握手时验证 Nifi 发送的证书。
但是......我不知道 1)这是否是好方法,2)我如何使用 CA Root 为 NiFi 生成我的商店(信任,......),3)我应该如何设置我的 YAML( insecureSkipVerify
好像不支持,...)
提前感谢您的帮助。
干杯,
奥利维尔
最佳答案
我有同样的问题,可以用 insecureSkipVerify
解决。旗帜。
traefik 的问题在于,NiFi 从 traefik 获取请求并将其自签名证书发送回 traefik 进行握手。 Traefik 不接受它,因此握手失败,导致 bad_certificate
NiFi 中的异常(具有日志级别 DEBUG
,因此您必须更改 logback.xml
文件)。
因此,一种解决方案可能是将您的自签名证书添加到 traefik,目前这是不可能的,see this (currently) open issue .
另一种解决方案是添加一个 nginx
在 traefik 和 NiFi 之间。所以traefik谈话HTTP
与 nginx 对话 HTTPS
使用 NiFi(这将是我接下来要尝试的事情)。
或者您可以设置insecureSkipVerify
像我在 daemonset.yaml
中所做的那样在 traefik 中标记:
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
insecureSkipVerify
标志在 spec.containers.args
内更改.希望有帮助!
关于proxy - Ingress Controller (Traefik) 和 Kubernetes 上的后端服务之间的安全通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49817014/