250x250
반응형
Notice
Recent Posts
Recent Comments
전산쟁이의 기억노트
kubernetes-Istio구성정보 본문
728x90
반응형
SMALL
Istio Concept & Data Flow
- Istio의 전체 Concept & Data Flow
- Concept
- ServiceMesh를 이용해 다양한 트래픽을 제어하는 역활
- http / websocket / http 등 트래픽 제어/관리에 대한 부하분산 수행
- Component별 역활
- Data Plane
- Service A / B에 구성된 Pod에는 Proxy용 Envoy Sidecar container가 배포
- Control Plane
- Mixer - 정책 설정 / ACL / 인증 역활
- Pilot : ingress routing, traffic mirroring, traffic shifting, canary deployments, circuit breaking, fault injection 역활 수행
- Galley : yaml을 istio용으로 변환 후 pilot으로 전송하고.
- Citadel : 데이터 전송시 암호화 전송(TLS) 역활, 현재 내부 통신에는 암호화과정이 없어서 사용하지 않음
- Data Plane
- 구성시 유의사항
- istio기반의 traffic shaping을 적용하려면, k8s에서 사용하는 ingres(or service nodeport)를 사용하면 적용이 안되고
service는 clusterip로 적용하고, istio ingressgateway에서 port를 정의해주어야 함.
- istio기반의 traffic shaping을 적용하려면, k8s에서 사용하는 ingres(or service nodeport)를 사용하면 적용이 안되고
Servicemesh : MSA기반의 아키텍텨는 각각 개별기능을 수행하는데, 분산 서비스 배포의 크기와 복잡성이 증가하면서 시스템을 이해하고 관리하기 더 어려워지짐. 클러스터 내부와 외부의 통신 라우팅도 복잡해지기 때문에 이러한 복잡성을 줄기기 위해 프록시를 사용하여 모든 트래픽을 확인 후 사용자가 설정한 구성에 따라 어플리케이션 트래픽을 관리하는 역활.
Istio 설치 절차
설치
$ curl -L https://istio.io/downloadIstio | sh -
$ cd istio-1.9.2
$ ./istioctl install --set profile=default
This will install the Istio 1.9.2 profile with ["Istio core"gateways"] components into the cluster. Proceed? (y/N) y
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Installation complete
# Istio기반의 proxy를 설치하기 위해서 namespace에 istio용 envoy 설치
$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
istio profile별 제공 기능
istio 서비스 상태 확인
$ kubectl get all -n istio-system
NAME READY STATUS RESTARTS AGE
pod/istio-ingressgateway-78d7b9b7db-zpxxf 1/1 Running 2 19d
pod/istiod-85c8645bbc-4jkbj 1/1 Running 1 19d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/istio-ingressgateway LoadBalancer 10.233.14.72 <pending> 15021:31094/TCP,80:32134/TCP,443:31338/TCP,15012:30093/TCP,15443:30233/TCP 20d
service/istiod ClusterIP 10.233.43.248 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 20d
service/tracing NodePort 10.233.13.45 <none> 16686:30008/TCP 17d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/istio-ingressgateway 1/1 1 1 20d
deployment.apps/istiod 1/1 1 1 20d
NAME DESIRED CURRENT READY AGE
replicaset.apps/istio-ingressgateway-78d7b9b7db 1 1 1 20d
replicaset.apps/istiod-85c8645bbc 1 1 1 20d
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/istio-ingressgateway Deployment/istio-ingressgateway <unknown>/80% 1 5 1 20d
horizontalpodautoscaler.autoscaling/istiod Deployment/istiod <unknown>/80% 1 5 1 20d
- Addon 설치
- Kiali : Istio 모니터링을 위한 대쉬보드
- Jager / zipkin : 분산 시스템 모니터링
- zipkin : Twitter에서 개발한 오픈소스
- jaeger: Uber에서 개발하고 CNCF 프로젝트로 진행중인 오픈소스. (k8s환경에서는 jaeger가 효율적이라는...)
- addon 설치
$ wget http://172.21.115.91:28080/...
$ kubectl apply -f ./sample/
$ kubectl get all -n istio-system
NAME READY STATUS RESTARTS AGE
pod/istio-ingressgateway-78d7b9b7db-zpxxf 1/1 Running 2 19d
pod/istiod-85c8645bbc-4jkbj 1/1 Running 1 19d
pod/jaeger-7f78b6fb65-jcrgz 1/1 Running 1 17d
pod/kiali-dc84967d9-cqn8v 1/1 Running 1 19d
pod/prometheus-7bfddb8dbf-vsddf 2/2 Running 4 19d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/istio-ingressgateway LoadBalancer 10.233.14.72 <pending> 15021:31094/TCP,80:32134/TCP,443:31338/TCP,15012:30093/TCP,15443:30233/TCP 20d
service/istiod ClusterIP 10.233.43.248 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 20d
service/jaeger-collector ClusterIP 10.233.35.73 <none> 14268/TCP,14250/TCP 17d
service/kiali NodePort 10.233.21.50 <none> 20001:30007/TCP,9090:31990/TCP 20d
service/prometheus ClusterIP 10.233.24.217 <none> 9090/TCP 20d
service/tracing NodePort 10.233.13.45 <none> 16686:30008/TCP 17d
service/zipkin ClusterIP 10.233.34.17 <none> 9411/TCP 17d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/istio-ingressgateway 1/1 1 1 20d
deployment.apps/istiod 1/1 1 1 20d
deployment.apps/jaeger 1/1 1 1 17d
deployment.apps/kiali 1/1 1 1 20d
deployment.apps/prometheus 1/1 1 1 20d
NAME DESIRED CURRENT READY AGE
replicaset.apps/istio-ingressgateway-78d7b9b7db 1 1 1 20d
replicaset.apps/istiod-85c8645bbc 1 1 1 20d
replicaset.apps/jaeger-7f78b6fb65 1 1 1 17d
replicaset.apps/kiali-dc84967d9 1 1 1 20d
replicaset.apps/prometheus-7bfddb8dbf 1 1 1 20d
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/istio-ingressgateway Deployment/istio-ingressgateway <unknown>/80% 1 5 1 20d
horizontalpodautoscaler.autoscaling/istiod Deployment/istiod <unknown>/80% 1 5 1 20d
대쉬보드 외부 접속하기
- kiali : http://{{서버IP}}:30007
- jaeger: http://{{서버IP}}:30008
1.삭제
$ istioctl x uninstall --purge
kubectl delete namespace istio-system
- 시스템 설정을 위한 설정값 안내Component list
- 항목용도기타Example yml
- gateway 설정 (tcp/30011에 대해 gateway 설정)
gateway http / tcp를 연결하기 위해 구성하는 로드밸런서 virtualservice service 게이트웨이에 바인딩 후 트래픽을 구성된 여러 엔드포인트로 전달 (트래픽 비율설정) virtualservice version(a.k.a subset) 특정 서비스에 대해 어플리케이션 바이너리의 버전 변경을 실행하는 집합 virtualservice source 서비스를 호출하는 다운스트림용 클라이언트 virtualservice host 클라이언트가 서비스 연결할때 사용하는 주소 destinationRule 라우팅 규칙을 처리한 후 연결할 네트워크 서비스를 설정 tcproute tcp트래픽에 대해 라우팅 규칙을 위한 조건 설정 tcproute match 활성화할 규칙조건 tcproute route 연결할 대상
Example yml
- gateway 설정 (tcp/30011에 대해 gateway 설정)
$vi gateway.yml
---
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: gateway
namespace: test
spec:
selector:
app: test
servers:
- hosts:
- '*'
port:
name: tcp
number: 30011
protocol: TCP
VirtualService 설정 (tcp/30011이 들어오면 service111-1, service111-2의 tcp/8080으로 연결하되 50%씩 트래픽 분할 처리)
$ vi vs.yaml
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: test-vs
namespace: test
spec:
gateways:
- gateway
hosts:
- appid111
tcp:
- match:
- port: 30011
route:
- destination:
host: appid111-1
port:
number: 3390
subset: v1
weight: 50
- destination:
host: appid111-2
port:
number: 3390
subset: v2
weight: 50
destinationrule 설정 (service111에 대해 v1, v2 설정)
$ vi rule.yml
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: test-rule
namespace: test
spec:
host: appid111
subsets:
- labels:
version: 'v1'
name: v1
- labels:
version: 'v2'
name: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
tls:
mode: DISABLE
reference
https://istio.io/latest/docs/setup/getting-started/
728x90
반응형
LIST
'컨테이너&가상화' 카테고리의 다른 글
onlyoffice를 컨테이너 기반에서 설치하기 (0) | 2022.08.07 |
---|---|
VMware GuestOS에서 마우스 5버튼 작동안될 경우 조치방법 (0) | 2022.08.07 |
k8s 강제로 pod 종료시키는 방법 (0) | 2022.07.24 |
Docker컨테이너 저장경로 변경방법 (0) | 2022.07.24 |
docker 와 cri-o 비교 (0) | 2022.07.24 |
Comments