6월 1일 아침, Istio 커뮤니티는 0.8 릴리스를 발표했습니다. 일반적인 버그 수정 및 성능 개선 외에, 이 어린이날 선물에는 어떤 기대할 만한 내용이 있을까요? 함께 살펴보겠습니다.
네트워킹
개선된 트래픽 관리 모델
0.8 버전은 새로운 트래픽 관리 구성 모델인 v1alpha3 Route API를 채택했습니다. 새 버전 모델은 몇 가지 새로운 기능을 추가하고 이전 버전 모델의 사용성 문제를 개선했습니다. 주요 변경 사항은 다음과 같습니다.
Gateway
새 버전에서는 K8s의 Ingress를 더 이상 사용하지 않고, Gateway를 채택하여 서비스 메시의 각 HTTP/TCP 로드 밸런서를 통합 구성합니다. Gateway는 인그레스 트래픽을 처리하는 Ingress Gateway, 서비스 메시 내부의 각 서비스 간 통신을 담당하는 Sidecar Proxy, 또는 이그레스 트래픽을 담당하는 Egress Gateway가 될 수 있습니다.
메시와 관련된 세 가지 Gateway 유형:
이러한 변경의 이유는 K8s의 Ingress 객체 기능이 너무 단순하여 Istio의 유연한 라우팅 규칙 요구 사항을 충족할 수 없기 때문입니다. 0.8 버전에서는 L4-L6 구성과 L7 구성이 각각 처리되며, Gateway에서는 노출 포트, TLS 설정과 같은 L4-L6 기능만 구성됩니다. 그런 다음 사용자는 VirtualService를 사용하여 표준 Istio 규칙을 구성하고 Gateway와 바인딩할 수 있습니다.
VirtualService
VirtualService는 alpha2 모델의 RouteRule을 대체합니다. VirtualService를 사용하는 데는 두 가지 장점이 있습니다.
하나의 서비스 관련 규칙을 함께 관리할 수 있습니다.
예를 들어, 아래 라우팅 규칙에서 reviews로 향하는 요청 트래픽의 기본 destination은 v1이며, user가 jason인 경우 v2로 라우팅됩니다. v1 모델에서는 두 개의 규칙을 사용하여 구현해야 했지만, VirtualService를 사용하면 하나의 규칙 아래에서 구현할 수 있습니다.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
cookie:
regex: "^(.*?;)?(user=jason)(;.*)?$"
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1존재하지 않는 “가상 서비스"를 외부에 노출한 다음, 이 “가상 서비스"를 Istio의 Service에 매핑할 수 있습니다.
아래 규칙의 bookinfo.com은 외부에 노출된 “가상 서비스"이며, bookinfo.com/reviews는 reviews 서비스에 매핑되고, bookinfo.com/ratings는 ratings 서비스에 매핑됩니다. VirtualService를 채택함으로써 Istio 라우팅 규칙의 유연성이 크게 향상되어 레거시 시스템과 Istio의 통합에 유리합니다.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- bookinfo.com
http:
- match:
- uri:
prefix: /reviews
route:
- destination:
host: reviews
- match:
- uri:
prefix: /ratings
route:
- destination:
host: ratings
...Envoy V2
제어 평면과 데이터 평면 표준 인터페이스는 Envoy를 지원합니다.
Ingress/Egress를 Gateway로 대체
앞서 언급했듯이, 새 버전에서는 Kubernetes Ingress와 Istio 라우팅 규칙을 함께 사용하는 것을 더 이상 지원하지 않습니다. Istio 0.8은 플랫폼 독립적인 Ingress/Egress Gateway를 지원하며, Kubernetes, Cloud Foundry에서 Istio 라우팅 규칙과 원활하게 통합될 수 있습니다.
인바운드 포트 제한
0.8 버전은 Pod 내에 선언된 포트의 인바운드 트래픽만 허용합니다.
보안
보안 구성 요소 Citadel
Istio의 보안 구성 요소인 Istio-Auth/Istio-CA를 공식적으로 Citadel(요새)로 명명했습니다.
클러스터 간 지원
여러 클러스터에 배포된 Citadel은 동일한 루트 인증서를 공유하여 다른 클러스터 내 서비스가 클러스터 간에 인증할 수 있도록 지원합니다.
인증 정책
인증 정책은 서비스 간 인증과 최종 사용자 인증을 모두 지원합니다.
원격 측정
Mixer와 Pilot은 자체 원격 측정 데이터를 보고하며, 보고 프로세스는 메시의 일반 서비스와 동일합니다.
설치
필요에 따라 일부 구성 요소 설치: 필요한 구성 요소만 설치할 수 있습니다. Istio의 라우팅 규칙만 사용하려면 Pilot만 설치하고 Mixer와 Citadel은 설치하지 않을 수 있습니다.
Mixer
CloudWatch: AWS CloudWatch에 측정 데이터를 보고할 수 있는 CloudWatch 플러그인이 추가되었습니다.
알려진 문제:
- Gateway에 바인딩된 VirtualService가 headless service를 가리키는 경우, 해당 규칙은 정상적으로 작동하지 않습니다.
- 0.8 버전은 Kubernetes 1.10.2와 호환성 문제가 있으므로, 현재는 1.9 버전을 사용하는 것이 좋습니다.
- convert-networking-config 도구에 문제가 있어 다른 네임스페이스가 istio-system 네임스페이스로 변경될 수 있습니다. 변환 도구를 허용한 후 수동으로 파일을 수정하여 이를 방지할 수 있습니다.
요약
0.8 버전에서 가장 큰 변화는 트래픽 구성 모델의 재구축입니다. 재구축된 모델은 외부 Gateway와 내부 Sidecar Proxy의 라우팅 구성을 통합했습니다. 동시에 VirtualService의 도입은 라우팅 규칙 구성을 더욱 집중적이고 유연하게 만들었습니다.
