NiFi Registry 는 Spring Boot Actuator 를 싣고 있으며 헬스 엔드포인트는 API 컨텍스트 경로 아래에 있다.
/nifi-registry-api/actuator/health
curl -i http://<REGISTRY_HOST>:18080/nifi-registry-api/actuator/health
curl -ik https://<REGISTRY_HOST>:18443/nifi-registry-api/actuator/health
정상이면 200 OK 와 함께 {"status":"UP"} 형태의 JSON 이 온다.
루트의 /health 를 쓰라는 안내가 돌아다니지만 그런 경로는 없다. 컨텍스트 경로(/nifi-registry-api) 를 빼면 404 가 온다. 배포판이나 버전에 따라 actuator 노출 범위가 다를 수 있으므로, 실제 인스턴스에 한 번 쳐 보고 프로브에 넣는다 (확인 필요).
경로가 막혀 있거나 인증이 걸려 있으면 가벼운 대안으로 버킷 목록을 쓴다. 익명 읽기가 허용된 Registry 에서는 인증 없이 200 이 온다.
curl -s -o /dev/null -w '%{http_code}\n' http://<REGISTRY_HOST>:18080/nifi-registry-api/buckets
Kubernetes 프로브는 다음과 같이 잡는다. Registry 는 기동에 수십 초가 걸리므로 initialDelaySeconds 를 넉넉히 준다.
livenessProbe:
httpGet:
path: /nifi-registry-api/actuator/health
port: 18080
initialDelaySeconds: 60
periodSeconds: 20
failureThreshold: 3
readinessProbe:
httpGet:
path: /nifi-registry-api/actuator/health
port: 18080
initialDelaySeconds: 30
periodSeconds: 10
TLS 를 켠 경우 포트는 18443 으로 바뀌고 프로브에 scheme: HTTPS 를 준다. kubelet 의 HTTPS 프로브는 서버 인증서를 검증하지 않으므로 사설 CA 를 쓰더라도 따로 신뢰 설정을 하지 않아도 된다.
NiFi 본체는 Registry 와 다른 경로를 쓴다. 본체 상태는 /nifi-api/system-diagnostics 이며 인증이 필요하다.
결론부터 적으면, 건너뛸 수 없다. NiFi 의 Site-to-Site 는 전송 방식이 RAW 든 HTTP 든 보안 모드에서는 양쪽이 서로의 인증서를 검증하는 상호 TLS 로 동작한다. 검증을 끄는 속성은 없고, nifi.remote.input.secure 는 보안 모드를 켜고 끄는 값이지 검증 여부를 정하는 값이 아니다.
-Dcom.sun.net.ssl.checkRevocation=false 같은 JVM 옵션은 폐지 목록 확인만 끄는 것이라 신뢰 체인 검증에는 영향이 없다.
그러므로 선택지는 둘이다.
상대 인증서를 truststore 에 넣는다. 자체 서명 인증서면 그 인증서를, 사설 CA 로 발급했으면 CA 인증서를 넣는다. 양쪽 모두 상대를 신뢰해야 한다.
keytool -import -trustcacerts -alias peer-nifi \
-file peer.crt -keystore /opt/nifi/conf/truststore.jks
# nifi.properties
nifi.security.truststore=./conf/truststore.jks
nifi.security.truststoreType=JKS
nifi.security.truststorePasswd=${TRUSTSTORE_PASSWORD}
여기에 더해 상대 NiFi 의 정책에서 이쪽 인증서의 DN 에 Retrieve Site-to-Site Details 권한을, 대상 포트에 데이터 송수신 권한을 줘야 한다. 인증서가 맞아도 권한이 없으면 Unable to communicate with remote instance 로 끝난다.
보안을 끈다. 신뢰 구간 안의 테스트 환경이라면 양쪽 모두 평문 HTTP 로 띄우고 S2S 도 비보안으로 맞춘다. NiFi 가 HTTPS 로 떠 있으면 S2S 만 평문으로 둘 수 없다. Remote Process Group 의 URL 도 http:// 로 적는다.
nifi.remote.input.secure=false
nifi.remote.input.http.enabled=true
인증서 문제로 실패하면 nifi-app.log 에 원인이 남는다. unable to find valid certification path 는 truststore 누락, certificate_unknown 은 상대가 이쪽을 신뢰하지 않는 경우, 호스트 이름 불일치는 인증서의 SAN 에 접속 주소가 없는 경우다.