Переконайтеся, що mTLS увімкнено

Щойно ви додали застосунки до ambient mesh, ви можете легко перевірити, чи ввімкнено mTLS серед ваших навантажень, використовуючи один або кілька методів, наведених нижче:

Перевірка mTLS за допомогою конфігурацій ztunnel робочого навантаження

За допомогою зручної команди istioctl ztunnel-config workloads ви можете перевірити, чи налаштоване ваше робоче навантаження на надсилання та приймання трафіку HBONE за значенням у стовпці PROTOCOL. Наприклад:

$ 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 на вашому навантаженні не означає, що ваше навантаження відкидатиме будь-який трафік у вигляді простого тексту. Якщо ви хочете, щоб ваше навантаження відкидало текстовий трафік, створіть політику PeerAuthentication з режимом mTLS, встановленим на STRICT для вашого навантаження.

Перевірка mTLS за допомогою метрик

Якщо ви встановили Prometheus, ви можете налаштувати пересилання портів і відкрити інтерфейс Prometheus за допомогою наступної команди:

$ 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 за допомогою логів

Ви також можете переглянути лог ztunnel на стороні джерела або призначення, щоб підтвердити, що mTLS увімкнено, а також перевірити ідентичність учасників. Нижче наведено приклад логу ztunnel на стороні джерела для запиту від сервісу curl до сервісу details:

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

Якщо ви встановили Kiali та Prometheus, ви можете візуалізувати комунікацію вашого навантаження в ambient mesh за допомогою панелі Kiali. Ви можете побачити, чи має зʼєднання між будь-якими навантаженнями значок замка, щоб перевірити, чи ввімкнено mTLS, а також перевірити інформацію про ідентичність учасників:

Панель Kiali
Панель Kiali

Зверніться до документа Візуалізація застосунку і метрик для отримання додаткової інформації.

Перевірка за допомогою tcpdump

Якщо ви маєте доступ до робочих вузлів Kubernetes, ви можете запустити команду 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
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!