Istio PeerAuthentication
개요
이스티오 내 서비스 간 인증 정책을 설정하는 리소스.
이를 통해 mTLS로 통신할 건지, 평문 통신할 건지 등의 요소를 정할 수 있다.
구체적으로는 요청을 받는 서버 측 리스너에 설정이 들어가는 것이기 때문에 mTLS를 할 때 만약 클라 측에서 인증 모드를 설정하고 싶다면 이스티오 데스티네이션룰을 설정해야 한다.
이스티오의 정책 관련 리소스가 대부분 그러한데, 정책의 적용 범위가 3가지로 나뉜다.
- 특정 네임스페이스에 셀렉터를 지정하면 지정된 워크로드 대상으로 적용.
- 특정 네임스페이스에 셀렉터를 명시하지 않으면 네임스페이스 전체 적용.
- 이스티오 루트 네임스페이스(istio-system)에 셀렉터를 명시하지 않으면 메시 전체 적용.
지역적인 설정일수록 우선순위가 더 높은 방식이고, 네임스페이스나 메시 단위 리소스는 해당 범위에 하나만 존재할 수 있다.
여러 개를 둔다고 해도 가장 오래된 것만 적용되는 방식이다.
워크로드 대상 정책 역시 여러 개가 매칭이 되는 케이스라면 오래된 정책이 적용된다.
양식 작성법
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: foo
spec:
selector:
matchLabels:
app: finance
mtls:
mode: STRICT
portLevelMtls:
8080:
mode: DISABLE
위의 필드가 전부이다.
selector
로 워크로드를 라벨 셀렉터.
mtls
에서 tls 세팅, portLevelMtls
에서 포트 레벨 tls 설정을 한다.
(당연하지만 포트 레벨 tls는 서비스 포트가 아니라 워크로드 기준이다.)
포트 레벨 설정을 할 수 있다는 것에서 이게 엔보이의 리스너 필드에 설정되는 값이란 것을 쉽게 눈치챌 수 있다.
이스티오 데스티네이션룰에는 요청을 보내는 클라 측에서 tls 모드를 설정하는 것도 있는데, 이 둘이 상충되게 세팅하지 않도록 주의하자.
가령 클라측에서는 mtls하겠다고 했는데 여기에서 disable 하면 말짱 도루묵이다.
tls 모드는 다음과 같다.
- UNSET - 설정되지 않은 상태로, 상위 범위의 리소스 정책이 적용되며 그 외엔 PERMISSIVE로 간주된다.
- DISABLE - tls 비활성화
- PERMISSIVE - mtls를 기본으로 하나 아니어도 허용
- STRICT - 무조건 mtls(클라 측에 무조건 인증서 세팅 필요)
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: "example-workload-policy"
namespace: "foo"
spec:
selector:
matchLabels:
app: example-app
portLevelMtls:
80:
mode: DISABLE
UNSET의 예시를 들자면, 이건 워크로드의 80 포트에 대해서는 mtls를 비활성화한다.
그러나 foo
네임스페이스 단위의 정책이 따로 설정돼있다면 다른 포트들에 대해서는 해당 정책이 적용될 것이다.
관련 문서
이름 | noteType | created |
---|---|---|
5W - 이스티오 mTLS와 SPIFFE | published | 2025-05-11 |
5W - 이스티오 JWT 인증 | published | 2025-05-11 |
5W - 이스티오 인가 정책 설정 | published | 2025-05-11 |
E-istio-csr 사용 실습 | topic/explain | 2025-06-09 |
E-앰비언트 모드에서 메시 기능 활용 | topic/explain | 2025-06-07 |