Istio
Istio는 애플리케이션 네트워크 기능을 유연하고 쉽게 자동화할 수 있는 투명한 언어 독립적 방법을 제공하는 현대화된 서비스 네트워킹 레이어인 서비스 메시입니다. 클라우드 기반 애플리케이션을 구성하는 다양한 마이크로서비스를 관리하는 데 널리 사용되는 솔루션입니다. Istio 서비스 메시는 또한 이러한 마이크로서비스가 서로 통신하고 데이터를 공유하는 방법을 지원합니다.
조직이 클라우드로의 이동을 가속화하면서 필요에 따라 애플리케이션도 현대화하고 있습니다. 그러나 모놀리식 레거시 앱을 클라우드 기반 앱으로 전환하면 DevOps팀에 문제가 발생할 수 있습니다.
개발자는 클라우드에서 이동성을 보장하기 위해 느슨하게 결합된 마이크로서비스를 사용하여 앱을 어셈블하는 방법을 학습해야 합니다. 동시에 운영팀은 점점 더 커지는 하이브리드 및 멀티 클라우드 환경 내에서 새로운 클라우드 기반 앱을 관리해야 합니다. Istio를 사용하면 이러한 작업을 수행할 수 있습니다.
Istio의 정의
Istio는 조직에서 분산형 마이크로서비스 기반 앱을 어디서나 실행할 수 있도록 지원하는 오픈소스 서비스 메시입니다. 왜 Istio를 사용해야 하나요? Istio를 통해 조직은 마이크로서비스를 보호, 연결, 모니터링할 수 있으므로 엔터프라이즈 앱을 더욱 빠르고 안전하게 현대화할 수 있습니다.
About
마이크로 서비스 아키텍쳐로 어플리케이션을 개발하게되면 수많은 어플리케이션과 서비스가 나온다.
외부에서 한개의 api 호출을 하였음에도 내부적으론 수많은 어플리케이션을 지나 결과가 나오는데 만약에 문제가 생긴다면 어떠한 서비스에 문제가 있는지 알기 어렵다.
기존 도커 명령어를 통해 컨테이너를 관리하던것에서 쿠버네티스를 통해 Pod, Replicaset, ReplicationController, Deployment 등으로 추상화 시켜 관리 하듯이 네트워크 측면에서 추상화하여 관리할 수 있게 해주는 도구이며,
보안, 로드밸런싱, 모니터링, HealthCheck, 써킷 브레이커(circuit breaker), 트래픽 처리 로직, 등 서비스간의 통신을 인프라 내부에서 추상화를 통해 이러한 기능을 제공하는 것을 서비스 메쉬라 한다.
Istio는 서비스 메쉬의 구현체로써 서비스메쉬는 소프트웨어와 클러스터(쿠버네티스 등)사이의 추가적인 레이어를 통해 네트워크 통신을 추상화한다.
Platform Requirements
Istio 데이터 플레인1 모드 와 관계없이 Kubernetes 환경에서 Istio를 사용하려면 일반적으로 트래픽 가로채기 및 라우팅을 지원하는 Linux 커널이 실행되는 Kubernetes 노드가 필요합니다. Istio는 트래픽 관리를 위해 iptables(기본값)와 nftables 두 가지 백엔드를 지원합니다.
지난 10 년 동안 출시 된 대부분의 Linux 커널에는 Istio가 사용하는 기능에 대한 기본 지원이 포함됩니다. 필요할 때 자동로드되거나 내장 될 커널 모듈입니다. 필요한 특정 커널 모듈은 어떤 백엔드를 사용하기로 선택하느냐에 따라 달라집니다.
iptables backend
When using the iptables backend (the default), the following kernel modules are required for Istio to function correctly:
Primary iptables Modules:
| Module | Remark |
| br_netfilter | |
| ip6table_mangle | Only needed for IPv6/dual-stack clusters |
| ip6table_nat | Only needed for IPv6/dual-stack clusters |
| ip6table_raw | Only needed for IPv6/dual-stack clusters |
| iptable_mangle | |
| iptable_nat | |
| iptable_raw | Only needed for DNS interception in sidecar mode |
| xt_REDIRECT | |
| xt_connmark | Needed for ambient dataplane mode, and sidecar dataplane mode with TPROXY interception (default) |
| xt_conntrack | |
| xt_mark | Needed for ambient dataplane mode, and sidecar dataplane mode with TPROXY interception (default) |
| xt_owner | |
| xt_tcpudp | |
| xt_multiport | |
| ip_set | Needed for ambient dataplane mode |
위에 나열된 모듈에서 사용되는 다음 추가 모듈들도 클러스터 노드에 로드 되어야 합니다:
| Module | Remark |
| bridge | |
| ip6_tables | Only needed for IPv6/dual-stack clusters |
| ip_tables | |
| nf_conntrack | |
| nf_conntrack_ipv4 | |
| nf_conntrack_ipv6 | Only needed for IPv6/dual-stack clusters |
| nf_nat | |
| nf_nat_ipv4 | |
| nf_nat_ipv6 | Only needed for IPv6/dual-stack clusters |
| nf_nat_redirect | |
| x_tables | |
| ip_set_hash_ip | Needed for ambient dataplane mode |
/etc/modules-load.d/istio-iptables.conf 파일에 저장:
# Primary iptables Modules
br_netfilter
ip6table_mangle
ip6table_nat
ip6table_raw
iptable_mangle
iptable_nat
iptable_raw
xt_REDIRECT
xt_connmark
xt_conntrack
xt_mark
xt_owner
xt_tcpudp
xt_multiport
ip_set
# The following additional modules are used by the above listed modules and should also be loaded on the cluster node:
bridge
ip6_tables
ip_tables
nf_conntrack
nf_conntrack_ipv4
nf_conntrack_ipv6
nf_nat
nf_nat_ipv4
nf_nat_ipv6
nf_nat_redirect
x_tables
ip_set_hash_ip
nftables backend
nftables 프레임워크는 iptables를 대체하는 최신 프레임워크로, 향상된 성능과 유연성을 제공합니다.
Istio는 nftables 규칙을 구성하기 위해 nft CLI 도구를 사용합니다.
nft 바이너리는 버전 1.0.1 이상이어야 하며, Linux 커널 버전 5.13 이상이 필요합니다.
nft CLI가 올바르게 작동하려면 호스트 시스템에 다음 커널 모듈이 설치되어 있어야 합니다.
| Module | Remark |
| nf_tables | Core nftables module |
| nf_conntrack | Needed for connection tracking support |
| nft_ct | |
| nf_defrag_ipv4 | |
| nf_defrag_ipv6 | Only needed for IPv6/dual-stack clusters |
| nft_nat | |
| nft_socket | |
| nft_tproxy | |
| nft_redir |
/etc/modules-load.d/istio-nftables.conf 파일에 저장:
# nftables backend
nf_tables
nf_conntrack
nft_ct
nf_defrag_ipv4
nf_defrag_ipv6
nft_nat
nft_socket
nft_tproxy
nft_redir
설치 상태 확인 스크립트
#!/bin/bash
# Comprehensive Istio health check
# Istio 종합 상태 확인
echo "=== Checking Istio Pods ==="
kubectl get pods -n istio-system
echo -e "\n=== Checking Istio Services ==="
kubectl get svc -n istio-system
echo -e "\n=== Checking Istio Deployments ==="
kubectl get deployments -n istio-system
echo -e "\n=== Checking Istio HPA ==="
kubectl get hpa -n istio-system
echo -e "\n=== Checking Webhooks ==="
kubectl get mutatingwebhookconfigurations | grep istio
kubectl get validatingwebhookconfigurations | grep istio
echo -e "\n=== Checking Istio ConfigMaps ==="
kubectl get configmap -n istio-system
echo -e "\n=== Waiting for all pods to be ready ==="
kubectl wait --for=condition=ready pod --all -n istio-system --timeout=60s
See also
- Service mesh
- Envoy
- ZooKeeper
- etcd
- Eureka (Netflix)
- Consul (Hashcorp)
- Kubeflow:Install
Favorite site
Basic
- 196. (Istio, Envoy) Envoy 기초 사용 방법 및 xDS 개념, 사용 방법, ADS와 Istio Pilot의 관계
- Istio 솔루션 | Google Cloud
- Istio란? | Google Cloud
- Istio 아키텍처와 기능 이해하기
- Istio란? - 대한민국 | IBM
- Istio란 무엇인가?
- (Architecture) MSA : Istio 개념 잡기 - Azderica
- Service Mesh Architecture & Istio를 알아보자 - 호롤리한 하루
References
-
데이터 플레인은 워크로드 인스턴스 간의 트래픽을 직접 처리하고 라우팅하는 메쉬의 일부입니다. ↩