Oracle Cloud Native 환경에서 Istio Proxy Sidecar Injection 사용

소개

Istio는 서비스 간 통신을 처리하기 위해 별도의 인프라 계층을 제공하는 서비스 메시입니다. 네트워크 통신은 서비스 자체에서 추상화되고 프록시에 의해 처리됩니다. Istio는 sidecar 설계를 사용합니다. 즉, 모든 서비스 컨테이너 옆에 있는 자체 컨테이너에서 통신 프록시가 실행됩니다. 자동 sidecar 주입을 적용하려면 응용 프로그램에서 사용할 이름 공간에 istio-injection=enabled 레이블이 지정되어야 합니다.

목표

이 사용지침서에서는 자동 프록시 sidecar 삽입을 사용으로 설정하여 Oracle Cloud Native Environment에서 Istio의 기능을 활용하는 방법을 보여줍니다.

이 자습서에서는 자동 프록시 sidecar 주입을 사용하지 않고 응용 프로그램을 배치합니다. 그런 다음 자동 프록시 sidecar 인젝션을 사용으로 설정하고 응용 프로그램을 다시 배치합니다. 그런 다음 서비스 메시의 Pods가 Istio sidecar 프록시를 실행하고 있음을 알 수 있습니다.

필요 조건

Kubernetes 클러스터를 포함하는 Oracle Cloud Native Environment Release 1.4 배포. 다음 위치에서 자습서를 참조하십시오.

고가용성 Oracle Cloud Native 환경 배포

Oracle Cloud Native 환경 배포

또한 Istio 모듈을 사용하여 서비스 메시를 배포해야 합니다. Istio 모듈 배포에 대한 자세한 내용은 Oracle Cloud Native Environment Documentation를 참조하십시오.

Istio가 설치되어 실행 중인지 확인

컨트롤 플레인 노드에서 다음 명령을 사용하여 istio-system 이름 공간에 배치를 표시합니다.

kubectl get deployment -n istio-system

출력은 다음과 유사해야 합니다.

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
grafana                2/2     2            2           2m44s
istio-egressgateway    2/2     2            2           2m48s
istio-ingressgateway   2/2     2            2           2m48s
istiod                 2/2     2            2           3m2s
prometheus-server      2/2     2            2           2m44s

간단한 NGINX 배포 생성

다음 명령을 사용하여 nginx 이미지를 실행하는 hello-world라는 새 배치를 만듭니다.

kubectl create deployment --image container-registry.oracle.com/olcne/nginx:1.17.7 hello-world

기본 네임스페이스의 Kubernetes POD 보기

다음 명령을 사용하여 POD를 나열합니다.

kubectl get pods

출력은 다음과 유사해야 합니다.

NAME              READY   STATUS    RESTARTS   AGE
hello-world-...   1/1     Running   0          18s

READY 열이 1/1이면 Istio 자동 프록시 sidecar 주입이 활성화되지 않았음을 나타냅니다.

NGINX 배포 삭제

다음 명령을 사용하여 hello-world 배치를 삭제합니다.

kubectl delete deployments hello-world

자동 프록시 sidecar 인젝션 사용

자동 sidecar 주입을 적용하려면 응용 프로그램에서 사용할 이름 공간에 istio-injection=enabled 레이블이 지정되어야 합니다. 다음 예에서는 기본 이름 공간에 레이블을 지정합니다.

kubectl label namespace default istio-injection=enabled

kubectl get namespace 명령은 기본 이름 공간에 레이블이 제대로 지정되었는지 확인합니다.

kubectl get namespace -L istio-injection

출력은 다음과 유사해야 합니다.

NAME                           STATUS   AGE   ISTIO-INJECTION
default                        Active   23m   enabled
externalip-validation-system   Active   22m   
istio-system                   Active   19m   
kube-node-lease                Active   23m   
kube-public                    Active   23m   
kube-system                    Active   23m   
kubernetes-dashboard           Active   22m   

이제 기본 네임스페이스에 ISTIO_INJECTION 레이블이 포함된 것을 확인할 수 있습니다.

간단한 NGINX 배포 생성

다음 명령을 사용하여 nginx 이미지를 실행하는 hello-world라는 새 배치를 만듭니다.

kubectl create deployment --image container-registry.oracle.com/olcne/nginx:1.17.7 hello-world

기본 네임스페이스의 Kubernetes POD 보기

kubectl get pods 명령을 사용하여 POD를 나열합니다.

kubectl get pods

출력은 다음과 유사해야 합니다.

NAME              READY   STATUS    RESTARTS   AGE
hello-world-...   2/2     Running   0          20s

READY 열은 2/2입니다. 즉, Istio 자동 프록시 sidecar 주입이 활성화되어 있고 메시의 Pods가 Istio sidecar 프록시를 실행하고 있음을 나타냅니다.

프록시 측의 자동 주입 비활성화

다음과 같이 kubectl label를 사용하여 기본 네임스페이스에서 istio-injection=enabled 레이블을 제거합니다.

kubectl label namespace default istio-injection-

kubectl get namespace 명령은 레이블이 기본 이름 공간에서 제거되었는지 확인합니다.

kubectl get namespace -L istio-injection

출력은 다음과 유사해야 합니다.

NAME                           STATUS   AGE   ISTIO-INJECTION
default                        Active   39m   
externalip-validation-system   Active   38m   
istio-system                   Active   36m   
kube-node-lease                Active   39m   
kube-public                    Active   39m   
kube-system                    Active   39m   
kubernetes-dashboard           Active   38m   

마지막으로 NGINX 배치를 삭제합니다.

kubectl delete deployments hello-world

추가 정보

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 찾아보거나 Oracle Learning YouTube channel에서 무료 학습 콘텐츠에 액세스할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 변경하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.