2장. 메시로 트래픽 가져오기
Istio API를 사용하여 게이트웨이 삽입을 사용하여 설치된 게이트웨이 프록시를 구성하여 메시 외부에서 발생하는 트래픽을 수락하고 해당 트래픽을 메시 내의 서비스로 라우팅할 수 있습니다.
LoadBalancer
유형 Service
또는 OpenShift 경로를
사용하여 클러스터 외부의 트래픽에 게이트웨이 프록시를 노출할 수 있습니다.
2.1. 수신 트래픽을 수락하도록 게이트웨이 삽입을 사용하여 설치된 게이트웨이 구성 정보 링크 복사링크가 클립보드에 복사되었습니다!
게이트웨이 삽입을 사용하여 게이트웨이를 설치할 때 Istio Gateway
및 VirtualService
리소스를 결합하여 수신 트래픽을 수신하도록 구성할 수 있습니다. Istio Gateway
리소스는 수신 또는 발신 HTTP/TCP 연결을 수신하는 메시의 에지에서 작동하는 로드 밸런서를 설명합니다. 게이트웨이
사양은 노출해야 하는 포트 세트, 사용할 프로토콜 유형, 로드 밸런서에 대한 SNI(Server Name Indication) 구성을 설명합니다. VirtualServices
는 VirtualServices
를 사용하여 내부 메시 트래픽에 대한 라우팅 규칙을 정의하는 방법과 유사하게 Istio 게이트웨이
에 적용할 라우팅 규칙을 정의합니다.
다음 예에서 Istio Gateway
리소스는 외부 트래픽의 진입점으로 작동하도록 게이트웨이 프록시를 구성합니다. 이 구성은 호스트 info.com
의 포트 443(HTTPS)을 노출합니다. 예제 구성은 istio: ingressgateway
레이블이 있는 포드에 적용됩니다. tls
모드는 ScanSetting PLE
로 구성되며, 이 모드는 예제에서 제공하는 인증서 및 개인 키를 사용하여 들어오는 HTTPS 트래픽을 종료합니다.
샘플 구성
다음 VirtualService
는 이전 예제 구성에 표시된 Istio Gateway
리소스에 바인딩됩니다. 사양은 /reviews/
경로 접두사를 사용하여 info
네임스페이스의 reviews 서비스로 트래픽을 라우팅하는 규칙을 정의합니다. VirtualService
는 이전에 표시된 Gateway
리소스를 명시적으로 참조합니다. 이렇게 하면 라우팅 규칙이 지정된 게이트웨이를 통해 들어오는 트래픽에만 적용됩니다.
샘플 구성
2.1.1. Istio 게이트웨이 및 VirtualService 리소스를 사용하여 서비스 노출 링크 복사링크가 클립보드에 복사되었습니다!
이 절차에서는 Istio 게이트웨이
및 VirtualService
리소스를 사용하여 게이트웨이 삽입을 통해 배포된 게이트웨이를 구성합니다. 리소스는 메시의 서비스를 메시 외부의 트래픽에 노출하도록 게이트웨이를 구성합니다. 그런 다음 게이트웨이의 Service
를 LoadBalancer
로 입력하여 클러스터 외부의 트래픽에 게이트웨이를 노출합니다.
사전 요구 사항
- 게이트웨이 삽입을 사용하여 Istio 게이트웨이를 설치했습니다.
프로세스
다음 명령을 실행하여
httpbin
이라는 네임스페이스를 생성합니다.oc create namespace httpbin
$ oc create namespace httpbin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 네임스페이스에서 사이드카 삽입을 활성화합니다.
InPlace
업그레이드 전략을 사용하는 경우 다음 명령을 실행합니다.oc label namespace httpbin istio-injection=enabled
$ oc label namespace httpbin istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고RevisionBased
업그레이드 전략을 사용하는 경우 다음 명령을 실행합니다.<
revision-name>
을 찾으려면 다음 명령을 실행합니다.oc get istiorevisions.sailoperator.io
$ oc get istiorevisions.sailoperator.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 샘플 출력:
NAME TYPE READY STATUS IN USE VERSION AGE default Local True Healthy True v1.24.3 3m33s
NAME TYPE READY STATUS IN USE VERSION AGE default Local True Healthy True v1.24.3 3m33s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사이드카 삽입을 활성화하려면 버전 이름으로 네임스페이스에 레이블을 지정합니다.
oc label namespace httpbin istio.io/rev=default
$ oc label namespace httpbin istio.io/rev=default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 명령을 실행하여
httpbin
이라는 샘플 서비스를 배포합니다.oc apply -n httpbin -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml
$ oc apply -n httpbin -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Istio
게이트웨이
리소스를 정의하는httpbin-gw.yaml
이라는 YAML 파일을 생성합니다. 이 리소스는 호스트httpbin.example.com
의 포트 80(HTTP)을 노출하도록 게이트웨이 프록시를 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 YAML 파일을 적용합니다.
oc apply -f httpbin-gw.yaml
$ oc apply -f httpbin-gw.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VirtualService
에 대한httpbin-vs.yaml
이라는 YAML 파일을 생성합니다.VirtualService
는 게이트웨이 프록시에서httpbin
서비스로 트래픽을 라우팅하는 규칙을 정의합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 YAML 파일을 적용합니다.
oc apply -f httpbin-vs.yaml
$ oc apply -f httpbin-vs.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 확인을 위해 다음 명령을 실행하여
curl
클라이언트의 네임스페이스를 생성합니다.oc create namespace curl
$ oc create namespace curl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
curl
클라이언트를 배포합니다.oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
$ oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
CURL_POD
변수를curl
포드의 이름으로 설정합니다.CURL_POD=$(oc get pods -n curl -l app=curl -o jsonpath='{.items[*].metadata.name}')
$ CURL_POD=$(oc get pods -n curl -l app=curl -o jsonpath='{.items[*].metadata.name}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl
클라이언트를 사용하여 수신 게이트웨이서비스
리소스를 통해httpbin
애플리케이션의/headers
엔드포인트로 요청을 보냅니다. 요청의Host
헤더를httpbin.example.com
으로 설정하여 IstioGateway
및VirtualService
리소스가 지정하는 호스트와 일치시킵니다. 다음curl
명령을 실행하여 요청을 보냅니다.oc exec $CURL_POD -n curl -- \ curl -s -I \ -H Host:httpbin.example.com \ <gateway_name>.<gateway_namespace>.svc.cluster.local/headers
$ oc exec $CURL_POD -n curl -- \ curl -s -I \ -H Host:httpbin.example.com \ <gateway_name>.<gateway_namespace>.svc.cluster.local/headers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 응답에는 요청이 성공했음을 나타내는
200 OK HTTP
상태가 있어야 합니다.출력 예
HTTP/1.1 200 OK server: istio-envoy ...
HTTP/1.1 200 OK server: istio-envoy ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
httpbin
VirtualService
에 정의된 해당 URI 접두사 일치가 없는 엔드포인트에 curl 요청을 보냅니다.oc exec $CURL_POD -n curl -- \ curl -s -I \ -H Host:httpbin.example.com \ <gateway_name>.<gateway_namespace>.svc.cluster.local/get
$ oc exec $CURL_POD -n curl -- \ curl -s -I \ -H Host:httpbin.example.com \ <gateway_name>.<gateway_namespace>.svc.cluster.local/get
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 응답에서
404 Not Found
상태를 반환해야 합니다. 이는/get
끝점에httpbin
VirtualService
리소스에 일치하는 URI 접두사가 없기 때문에 예상됩니다.출력 예
HTTP/1.1 404 Not Found server: istio-envoy ...
HTTP/1.1 404 Not Found server: istio-envoy ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스
유형을LoadBalancer
로 설정하여 클러스터 외부의 트래픽에 게이트웨이 프록시를 노출합니다.oc patch service <gateway_name> -n <gateway_namespace> -p '{"spec": {"type": "LoadBalancer"}}'
$ oc patch service <gateway_name> -n <gateway_namespace> -p '{"spec": {"type": "LoadBalancer"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고게이트웨이는 OpenShift 경로를 사용하여 클러스터 외부의 트래픽에도 노출될 수 있습니다. 자세한 내용은 "OpenShift 경로를 사용하여 클러스터 외부의 트래픽에 게이트웨이 추가"를 참조하십시오.
게이트웨이 서비스 리소스의 외부 호스트 이름 또는 IP 주소를 사용할 때 클러스터 외부에서
httpbin
서비스에 액세스할 수 있는지 확인합니다.클러스터가 실행 중인 환경에 대해
INGRESS_HOST
변수를 적절하게 설정해야 합니다.클러스터가 AWS에서 실행되는 경우 다음 명령을 실행하여
INGRESS_HOST
변수를 설정합니다.INGRESS_HOST=$(oc get service <gateway_name> -n <gateway_namespace> -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
$ INGRESS_HOST=$(oc get service <gateway_name> -n <gateway_namespace> -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클러스터가 GCP 또는 Azure에서 실행되는 경우 다음 명령을 실행하여
INGRESS_HOST
변수를 설정합니다.INGRESS_HOST=$(oc get service <gateway_name> -n <gateway_namespace> -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ INGRESS_HOST=$(oc get service <gateway_name> -n <gateway_namespace> -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 게이트웨이 호스트를 사용하여
curl
요청을httpbin
서비스로 보냅니다.curl -s -I -H Host:httpbin.example.com http://$INGRESS_HOST/headers
$ curl -s -I -H Host:httpbin.example.com http://$INGRESS_HOST/headers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
응답에
HTTP/1.1 200 OK
상태가 있는지 확인합니다. 이 상태는 요청이 성공했음을 나타냅니다.