2장. 메시로 트래픽 가져오기


Istio API를 사용하여 게이트웨이 삽입을 사용하여 설치된 게이트웨이 프록시를 구성하여 메시 외부에서 발생하는 트래픽을 수락하고 해당 트래픽을 메시 내의 서비스로 라우팅할 수 있습니다.

LoadBalancer 유형 Service 또는 OpenShift 경로를 사용하여 클러스터 외부의 트래픽에 게이트웨이 프록시를 노출할 수 있습니다.

게이트웨이 삽입을 사용하여 게이트웨이를 설치할 때 Istio GatewayVirtualService 리소스를 결합하여 수신 트래픽을 수신하도록 구성할 수 있습니다. Istio Gateway 리소스는 수신 또는 발신 HTTP/TCP 연결을 수신하는 메시의 에지에서 작동하는 로드 밸런서를 설명합니다. 게이트웨이 사양은 노출해야 하는 포트 세트, 사용할 프로토콜 유형, 로드 밸런서에 대한 SNI(Server Name Indication) 구성을 설명합니다. VirtualServicesVirtualServices 를 사용하여 내부 메시 트래픽에 대한 라우팅 규칙을 정의하는 방법과 유사하게 Istio 게이트웨이 에 적용할 라우팅 규칙을 정의합니다.

다음 예에서 Istio Gateway 리소스는 외부 트래픽의 진입점으로 작동하도록 게이트웨이 프록시를 구성합니다. 이 구성은 호스트 info.com 의 포트 443(HTTPS)을 노출합니다. 예제 구성은 istio: ingressgateway 레이블이 있는 포드에 적용됩니다. tls 모드는 ScanSetting PLE 로 구성되며, 이 모드는 예제에서 제공하는 인증서 및 개인 키를 사용하여 들어오는 HTTPS 트래픽을 종료합니다.

샘플 구성

apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
  name: info-gateway
  namespace: info
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 443
      name: https-443
      protocol: HTTPS
    hosts:
    - info.com
    tls:
      mode: SIMPLE
      serverCertificate: /etc/certs/servercert.pem
      privateKey: /etc/certs/privatekey.pem
Copy to Clipboard Toggle word wrap

다음 VirtualService 는 이전 예제 구성에 표시된 Istio Gateway 리소스에 바인딩됩니다. 사양은 /reviews/ 경로 접두사를 사용하여 info 네임스페이스의 reviews 서비스로 트래픽을 라우팅하는 규칙을 정의합니다. VirtualService 는 이전에 표시된 Gateway 리소스를 명시적으로 참조합니다. 이렇게 하면 라우팅 규칙이 지정된 게이트웨이를 통해 들어오는 트래픽에만 적용됩니다.

샘플 구성

kind: VirtualService
metadata:
  name: info-rule
  namespace: info
spec:
  hosts:
  - info.com
  gateways:
  - info/bookinfo-gateway
  http:
  - match:
    - uri:
        prefix: /reviews/
    route:
    - destination:
        port:
          number: 9080
        host: reviews.info.svc.cluster.local
Copy to Clipboard Toggle word wrap

2.1.1. Istio 게이트웨이 및 VirtualService 리소스를 사용하여 서비스 노출

이 절차에서는 Istio 게이트웨이VirtualService 리소스를 사용하여 게이트웨이 삽입을 통해 배포된 게이트웨이를 구성합니다. 리소스는 메시의 서비스를 메시 외부의 트래픽에 노출하도록 게이트웨이를 구성합니다. 그런 다음 게이트웨이의 ServiceLoadBalancer 로 입력하여 클러스터 외부의 트래픽에 게이트웨이를 노출합니다.

사전 요구 사항

  • 게이트웨이 삽입을 사용하여 Istio 게이트웨이를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 httpbin 이라는 네임스페이스를 생성합니다.

    $ oc create namespace httpbin
    Copy to Clipboard Toggle word wrap
  2. 네임스페이스에서 사이드카 삽입을 활성화합니다. InPlace 업그레이드 전략을 사용하는 경우 다음 명령을 실행합니다.

    $ oc label namespace httpbin istio-injection=enabled
    Copy to Clipboard Toggle word wrap
    참고

    RevisionBased 업그레이드 전략을 사용하는 경우 다음 명령을 실행합니다.

    1. < revision-name> 을 찾으려면 다음 명령을 실행합니다.

      $ oc get istiorevisions.sailoperator.io
      Copy to Clipboard Toggle word wrap

      샘플 출력:

      NAME      TYPE    READY   STATUS    IN USE   VERSION   AGE
      default   Local   True    Healthy   True    v1.24.3   3m33s
      Copy to Clipboard Toggle word wrap

    2. 사이드카 삽입을 활성화하려면 버전 이름으로 네임스페이스에 레이블을 지정합니다.

      $ oc label namespace httpbin istio.io/rev=default
      Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 httpbin 이라는 샘플 서비스를 배포합니다.

    $ oc apply -n httpbin -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/httpbin/httpbin.yaml
    Copy to Clipboard Toggle word wrap
  4. Istio 게이트웨이 리소스를 정의하는 httpbin-gw.yaml 이라는 YAML 파일을 생성합니다. 이 리소스는 호스트 httpbin.example.com 의 포트 80(HTTP)을 노출하도록 게이트웨이 프록시를 구성합니다.

    apiVersion: networking.istio.io/v1
    kind: Gateway
    metadata:
      name: httpbin-gateway
      namespace: httpbin
    spec:
      selector:
        istio: <gateway_name> 
    1
    
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - httpbin.example.com 
    2
    Copy to Clipboard Toggle word wrap
    1
    선택기 를 게이트웨이 프록시 배포 의 Pod 템플릿에 지정된 고유한 레이블 또는 세트로 설정합니다. 기본적으로 Istio Gateway 리소스 구성은 모든 네임스페이스의 일치하는 게이트웨이 포드에 적용됩니다.
    2
    hosts 필드를 사용하여 연결된 포트에서 메시 서비스에 액세스하려고 할 때 클라이언트에서 사용할 수 있는 주소 목록을 지정합니다.
  5. 다음 명령을 실행하여 YAML 파일을 적용합니다.

    $ oc apply -f httpbin-gw.yaml
    Copy to Clipboard Toggle word wrap
  6. VirtualService 에 대한 httpbin-vs.yaml 이라는 YAML 파일을 생성합니다. VirtualService 는 게이트웨이 프록시에서 httpbin 서비스로 트래픽을 라우팅하는 규칙을 정의합니다.

    apiVersion: networking.istio.io/v1
    kind: VirtualService
    metadata:
      name: httpbin
      namespace: httpbin
    spec:
      hosts:
      - httpbin.example.com 
    1
    
      gateways:
      - httpbin-gateway 
    2
    
      http:
      - match:
        - uri:
            prefix: /status
        - uri:
            prefix: /headers
        route:
        - destination: 
    3
    
            port:
              number: 8000
            host: httpbin
    Copy to Clipboard Toggle word wrap
    1
    VirtualService 의 라우팅 규칙이 적용되는 호스트 를 지정합니다. 지정된 호스트 는 VirtualService가 바인딩된 Istio 게이트웨이 리소스에서 노출해야 합니다.
    2
    게이트웨이 목록에 게이트웨이 이름을 추가하여 이전 단계에서 생성한 Istio Gateway 리소스에 VirtualService 를 바인딩합니다.
    3
    httpbin 서비스의 호스트포트 를 포함하는 대상 을 정의하여 이전에 배포된 httpbin 서비스에 일치하는 트래픽을 라우팅합니다.
  7. 다음 명령을 실행하여 YAML 파일을 적용합니다.

    $ oc apply -f httpbin-vs.yaml
    Copy to Clipboard Toggle word wrap
  8. 확인을 위해 다음 명령을 실행하여 curl 클라이언트의 네임스페이스를 생성합니다.

    $ oc create namespace curl
    Copy to Clipboard Toggle word wrap
  9. 다음 명령을 실행하여 curl 클라이언트를 배포합니다.

    $ oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
    Copy to Clipboard Toggle word wrap
  10. 다음 명령을 실행하여 CURL_POD 변수를 curl 포드의 이름으로 설정합니다.

    $ CURL_POD=$(oc get pods -n curl -l app=curl -o jsonpath='{.items[*].metadata.name}')
    Copy to Clipboard Toggle word wrap
  11. curl 클라이언트를 사용하여 수신 게이트웨이 서비스 리소스를 통해 httpbin 애플리케이션의 /headers 엔드포인트로 요청을 보냅니다. 요청의 Host 헤더를 httpbin.example.com 으로 설정하여 Istio GatewayVirtualService 리소스가 지정하는 호스트와 일치시킵니다. 다음 curl 명령을 실행하여 요청을 보냅니다.

    $ 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 Toggle word wrap
  12. 응답에는 요청이 성공했음을 나타내는 200 OK HTTP 상태가 있어야 합니다.

    출력 예

    HTTP/1.1 200 OK
    server: istio-envoy
    ...
    Copy to Clipboard Toggle word wrap

  13. 다음 명령을 실행하여 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
    Copy to Clipboard Toggle word wrap

    응답에서 404 Not Found 상태를 반환해야 합니다. 이는 /get 끝점에 httpbin VirtualService 리소스에 일치하는 URI 접두사가 없기 때문에 예상됩니다.

    출력 예

    HTTP/1.1 404 Not Found
    server: istio-envoy
    ...
    Copy to Clipboard Toggle word wrap

  14. 서비스 유형을 LoadBalancer 로 설정하여 클러스터 외부의 트래픽에 게이트웨이 프록시를 노출합니다.

    $ oc patch service <gateway_name> -n <gateway_namespace> -p '{"spec": {"type": "LoadBalancer"}}'
    Copy to Clipboard Toggle word wrap
    참고

    게이트웨이는 OpenShift 경로를 사용하여 클러스터 외부의 트래픽에도 노출될 수 있습니다. 자세한 내용은 "OpenShift 경로를 사용하여 클러스터 외부의 트래픽에 게이트웨이 추가"를 참조하십시오.

  15. 게이트웨이 서비스 리소스의 외부 호스트 이름 또는 IP 주소를 사용할 때 클러스터 외부에서 httpbin 서비스에 액세스할 수 있는지 확인합니다. 클러스터가 실행 중인 환경에 대해 INGRESS_HOST 변수를 적절하게 설정해야 합니다.

    1. 클러스터가 AWS에서 실행되는 경우 다음 명령을 실행하여 INGRESS_HOST 변수를 설정합니다.

      $ INGRESS_HOST=$(oc get service <gateway_name> -n <gateway_namespace> -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
      Copy to Clipboard Toggle word wrap
    2. 클러스터가 GCP 또는 Azure에서 실행되는 경우 다음 명령을 실행하여 INGRESS_HOST 변수를 설정합니다.

      $ INGRESS_HOST=$(oc get service <gateway_name> -n <gateway_namespace> -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 게이트웨이 호스트를 사용하여 curl 요청을 httpbin 서비스로 보냅니다.

      $ curl -s -I -H Host:httpbin.example.com http://$INGRESS_HOST/headers
      Copy to Clipboard Toggle word wrap
  16. 응답에 HTTP/1.1 200 OK 상태가 있는지 확인합니다. 이 상태는 요청이 성공했음을 나타냅니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat