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


Istio 게이트웨이VirtualService 리소스를 사용하여 게이트웨이 삽입을 통해 배포된 게이트웨이를 구성할 수 있습니다. 리소스는 메시의 서비스를 메시 외부에 있는 트래픽에 노출합니다. 게이트웨이 서비스 유형을 LoadBalancer 로 설정하여 클러스터 외부의 트래픽을 허용할 수 있습니다.

사전 요구 사항

  • 게이트웨이 삽입을 사용하여 Istio 게이트웨이를 설치했습니다.
  • Istio 게이트웨이VirtualService 리소스를 사용하고 있습니다.
  • 기존 VirtualService 구성이 있으며 앰비언트 모드로 마이그레이션하지 않습니다.

프로세스

  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
    1. 사이드카 삽입을 활성화하려면 버전 이름으로 네임스페이스에 레이블을 지정합니다.

      $ 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