상호 TLS가 활성화되었는지 확인하기
상호 TLS가 활성화되었는지 확인하기 (Verify mutual TLS is enabled)
앱비언트 메시에 애플리케이션을 추가했다면, 아래 방법 중 하나 이상을 사용해 워크로드들 사이에서 mTLS가 활성화되었는지 쉽게 확인할 수 있어요:
출처: Istio 문서
본문
워크로드의 ztunnel 구성으로 mTLS 검증하기 (Validate mTLS using workload's ztunnel configurations)
편리한 istioctl ztunnel-config workloads 명령을 사용해, PROTOCOL 열의 값을 통해 워크로드가 HBONE 트래픽을 보내고 받도록 구성되었는지 확인할 수 있어요. 예:
$ istioctl ztunnel-config workloads
NAMESPACE POD NAME IP NODE WAYPOINT PROTOCOL
default details-v1-857849f66-ft8wx 10.42.0.5 k3d-k3s-default-agent-0 None HBONE
default kubernetes 172.20.0.3 None TCP
default productpage-v1-c5b7f7dbc-hlhpd 10.42.0.8 k3d-k3s-default-agent-0 None HBONE
default ratings-v1-68d5f5486b-b5sbj 10.42.0.6 k3d-k3s-default-agent-0 None HBONE
default reviews-v1-7dc5fc4b46-ndrq9 10.42.1.5 k3d-k3s-default-agent-1 None HBONE
default reviews-v2-6cf45d556b-4k4md 10.42.0.7 k3d-k3s-default-agent-0 None HBONE
default reviews-v3-86cb7d97f8-zxzl4 10.42.1.6 k3d-k3s-default-agent-1 None HBONE
워크로드에 HBONE이 구성되어 있다고 해서 평문 트래픽을 거부한다는 뜻은 아니에요. 평문 트래픽을 거부하려면 워크로드에 대해 mTLS 모드가 STRICT인 PeerAuthentication 정책을 생성하세요.
메트릭에서 mTLS 검증하기 (Validate mTLS from metrics)
Prometheus를 설치했다면, 다음 명령을 사용해 포트-포워딩을 설정하고 Prometheus UI를 열 수 있어요:
$ istioctl dashboard prometheus
Prometheus에서 TCP 메트릭의 값을 볼 수 있어요. 먼저 Graph를 선택하고 istio_tcp_connections_opened_total, istio_tcp_connections_closed_total, istio_tcp_received_bytes_total, istio_tcp_sent_bytes_total 같은 메트릭을 입력하세요. 마지막으로 Execute를 클릭하세요. 데이터에는 다음과 같은 항목이 포함돼요:
istio_tcp_connections_opened_total{
app="ztunnel",
connection_security_policy="mutual_tls",
destination_principal="spiffe://cluster.local/ns/default/sa/bookinfo-details",
destination_service="details.default.svc.cluster.local",
reporter="source",
request_protocol="tcp",
response_flags="-",
source_app="curl",
source_principal="spiffe://cluster.local/ns/default/sa/curl",source_workload_namespace="default",
...}
connection_security_policy 값이 mutual_tls로 설정되어 있고 예상되는 소스·목적지 신원 정보와 함께 있는지 확인하세요.
로그에서 mTLS 검증하기 (Validate mTLS from logs)
소스 또는 목적지 ztunnel 로그를 확인해 mTLS가 활성화되어 있고 피어 신원이 있는지도 확인할 수 있어요. 아래는 curl 서비스에서 details 서비스로의 요청에 대한 소스 ztunnel 로그 예시예요:
2024-08-21T15:32:05.754291Z info access connection complete src.addr=10.42.0.9:33772 src.workload="curl-7656cf8794-6lsm4" src.namespace="default"
src.identity="spiffe://cluster.local/ns/default/sa/curl" dst.addr=10.42.0.5:15008 dst.hbone_addr=10.42.0.5:9080 dst.service="details.default.svc.cluster.local"
dst.workload="details-v1-857849f66-ft8wx" dst.namespace="default" dst.identity="spiffe://cluster.local/ns/default/sa/bookinfo-details"
direction="outbound" bytes_sent=84 bytes_recv=358 duration="15ms"
src.identity와 dst.identity 값이 올바른지 확인하세요. 그것들은 소스·목적지 워크로드 사이의 mTLS 통신에 사용되는 신원이에요. 자세한 내용은 로그를 통한 ztunnel 트래픽 확인 섹션을 참조하세요.
Kiali 대시보드로 검증하기 (Validate with Kiali dashboard)
Kiali와 Prometheus가 설치되어 있다면, Kiali의 대시보드를 사용해 앰비언트 메시에서의 워크로드 통신을 시각화할 수 있어요. 워크로드 사이의 연결에 자물쇠 아이콘이 있는지, 그리고 피어 신원 정보를 확인해 mTLS가 활성화되었는지 검증할 수 있어요:
자세한 내용은 애플리케이션과 메트릭 시각화 문서를 참조하세요.
tcpdump로 검증하기 (Validate with tcpdump)
쿠버네티스 워커 노드에 접근할 수 있다면, tcpdump 명령을 실행해 네트워크 인터페이스의 모든 트래픽을 캡처하고, 선택적으로 애플리케이션 포트와 HBONE 포트에 초점을 맞출 수 있어요. 이 예제에서 포트 9080은 details 서비스 포트이고 15008은 HBONE 포트예요:
$ tcpdump -nAi eth0 port 9080 or port 15008
tcpdump 명령의 출력에서 암호화된 트래픽을 볼 수 있어야 해요.
워커 노드에 접근할 수 없다면, netshoot 컨테이너 이미지를 사용해 명령을 쉽게 실행할 수 있을 거예요:
$ POD=$(kubectl get pods -l app=details -o jsonpath="{.items[0].metadata.name}")
$ kubectl debug $POD -i --image=nicolaka/netshoot -- tcpdump -nAi eth0 port 9080 or port 15008