Skip to content

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 버전 확인 (1.0.1 이상 필요)
nft --version

# 커널 버전 확인 (5.13 이상 필요)
uname -r

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

Favorite site

Basic

References


  1. 데이터 플레인은 워크로드 인스턴스 간의 트래픽을 직접 처리하고 라우팅하는 메쉬의 일부입니다.