Istio - Mutual TLS

우야·2021년 6월 3일
0
post-custom-banner

Mutual TLS with Istio

  • mTLS types:
  1. Permissive: Allow both http and mutual TLS traffic
  2. Strict: Allow only mutual TLS traffic i.e. it won’t accept plain text data
  3. Disabled: Plain text data will be sent in and out of the mesh

To enable mTLS first create mTLS authentication policy:

  1. Mesh-wide
apiVersion: authentication.istio.io/v1alpha1
kind: MeshPolicy
metadata:
  name: default
spec:
  peers:
  - mtls: {}
  1. Namespace-wide
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: default
  namespace: namespace-name
spec:
  peers:
  - mtls: {}
  1. For a specific servic
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: default
  namespace: namespace-name
spec:
  targets:
  - name: service-name
  peers:
  - mtls: {}

Apply Destination rule

“Policy” : 실행중인 서비스로 들어오는 트래픽이 mTLS를 사용하는것을 알려줌

  • service나 namespace는 mTLS로 트래픽을 받는다
    "DestinationRule" : trafficPolicy로 클라이언트에게 mTLS를 사용을 알려줌
  • mode : MUTUAL, ISTIO_MUTUAL, DISABLE, SIMPLE
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: default
  namespace: namespace-name
spec:
  host: "service-name.namespace-name.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL

Health Check

  • Kubelet에서 istio를 사용하는 Service,Pod에 Readiness, Liveness Probe 상태를 물어보면, 당연히 Istio에서 발급한 인증서가 없기때문에 실패한다.
  • 이를 해결하는 방법은?
    • Probe 상태체크 요청 -> Istion Pilot agent -> Application으로 redirection -> 반대로 돌아가면서 응답
    • 적용 방법
      • istio 설치시 heml 차트에 values.sidecarInjectorWebhook.rewriteAppHTTPProbe=true로 값 변경
      • Pod의 Annotation에 sidecar.istio.io/rewriteAppHTTPProbers: "true" 추가
profile
Fullstack developer
post-custom-banner

0개의 댓글