1.5. Bookinfo 애플리케이션 정보
info
예제 애플리케이션 설치는 애플리케이션을 배포하고 클러스터 외부에서 애플리케이션에 액세스할 수 있도록 게이트웨이 생성의 두 가지 주요 작업으로 구성됩니다.
info
애플리케이션을 사용하여 서비스 메시 기능을 탐색할 수 있습니다. bookinfo
애플리케이션을 사용하면 웹 브라우저의 요청이 메시를 통과하고 애플리케이션에 도달하는지 쉽게 확인할 수 있습니다.
info
애플리케이션은 온라인 서점의 단일 카탈로그 항목과 유사하게 도서에 대한 정보를 표시합니다. 애플리케이션에는 도서를 설명하는 페이지, 도서 세부 정보(ISBN, 페이지 수 및 기타 정보) 및 도서 리뷰가 표시됩니다.
정보
애플리케이션은 메시를 통해 노출되며 메시 구성은 애플리케이션을 구성하는 마이크로 서비스를 사용하여 요청을 처리하는 방법을 결정합니다. 검토 정보는 세 가지 서비스 중 하나에서 제공됩니다: reviews-v1
,reviews-v2
또는 reviews-v3
. reviews
가상 서비스를 정의하지 않고 bookinfo
애플리케이션을 배포하는 경우 메시는 라운드 로빈 규칙을 사용하여 요청을 서비스로 라우팅합니다.
reviews
가상 서비스를 배포하면 다른 동작을 지정할 수 있습니다. 예를 들어 사용자가 info
애플리케이션에 로그인하면 메시가 reviews-v2
서비스에 요청을 라우팅하고 애플리케이션에 검정색 별이 표시되도록 지정할 수 있습니다. 사용자가 bookinfo
애플리케이션에 로그인하지 않으면 메시는 reviews-v3
서비스에 요청을 라우팅하고 애플리케이션에 빨간색 별이 표시됩니다.
자세한 내용은 업스트림 Istio 문서의 Bookinfo 애플리케이션을 참조하십시오.
1.5.1. Bookinfo 애플리케이션 배포
사전 요구 사항
- OpenShift Container Platform 4.15 이상에 클러스터를 배포했습니다.
-
cluster-admin
역할의 사용자로 OpenShift Container Platform 웹 콘솔에 로그인되어 있습니다. - OpenShift CLI(oc)에 액세스할 수 있습니다.
- Red Hat OpenShift Service Mesh Operator를 설치하고 Istio 리소스를 생성했으며 Operator에서 Istio를 배포했습니다.
IstioCNI 리소스를 생성했으며 Operator에서 필요한 IstioCNI Pod를 배포했습니다.
-
OpenShift Container Platform 웹 콘솔에서 홈
프로젝트 페이지로 이동합니다. - 프로젝트 만들기를 클릭합니다.
프로젝트 이름 필드에
정보를
입력합니다.Display name 및 Description 필드는 보조 정보를 제공하며 필수는 아닙니다.
- 생성을 클릭합니다.
CLI에서 다음 명령을 입력하여
info
네임스페이스에 Istio 검색 선택기 및 삽입 레이블을 적용합니다.$ oc label namespace info istio-discovery=enabled istio-injection=enabled
참고이 예에서 Istio 리소스의 이름은
기본값
입니다. Istio 리소스 이름이 다른 경우istio-injection=enabled
레이블을 추가하는 대신istio.io/rev
레이블을 Istio 리소스의 이름으로 설정해야 합니다.CLI에서 다음 명령을 입력하여
bookinfo
애플리케이션을 배포하도록info
YAML 파일을 적용합니다.oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/platform/kube/bookinfo.yaml -n bookinfo
-
OpenShift Container Platform 웹 콘솔에서 홈
검증
CLI에서 다음 명령을 실행하여
info
서비스를 사용할 수 있는지 확인합니다.$ oc get services -n info
출력 예
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 172.30.137.21 <none> 9080/TCP 44s productpage ClusterIP 172.30.2.246 <none> 9080/TCP 43s ratings ClusterIP 172.30.33.85 <none> 9080/TCP 44s reviews ClusterIP 172.30.175.88 <none> 9080/TCP 44s
CLI에서 다음 명령을 실행하여
정보
Pod를 사용할 수 있는지 확인합니다.$ oc get pods -n info
출력 예
NAME READY STATUS RESTARTS AGE details-v1-698d88b-km2jg 2/2 Running 0 66s productpage-v1-675fc69cf-cvxv9 2/2 Running 0 65s ratings-v1-6484c4d9bb-tpx7d 2/2 Running 0 65s reviews-v1-5b5d6494f4-wsrwp 2/2 Running 0 65s reviews-v2-5b667bcbf8-4lsfd 2/2 Running 0 65s reviews-v3-5b9bd44f4-44hr6 2/2 Running 0 65s
Ready
열에2/2
가 표시되면 프록시 사이드카가 성공적으로 삽입되었습니다.Running
이 각 포드의Status
(상태) 열에 표시되는지 확인합니다.bookinfo
페이지에 요청을 전송하여 실행 중인정보
애플리케이션이 있는지 확인합니다. CLI에서 다음 명령을 실행합니다.$ oc exec "$(oc get pod -l app=ratings -n info -o jsonpath='{.items[0].metadata.name}')" -c ratings -n bookinfo -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
1.5.2. 게이트웨이를 사용하여 Bookinfo 애플리케이션에 액세스하는 정보
Red Hat OpenShift Service Mesh Operator는 게이트웨이를 배포하지 않습니다. 게이트웨이는 컨트롤 플레인의 일부가 아닙니다. 보안 모범 사례로 Ingress 및 Egress 게이트웨이는 컨트롤 플레인이 포함된 네임스페이스와 다른 네임스페이스에 배포해야 합니다.
게이트웨이 API 또는 게이트웨이 삽입 방법을 사용하여 게이트웨이를 배포할 수 있습니다.
1.5.3. Istio 게이트웨이 삽입을 사용하여 Bookinfo 애플리케이션에 액세스
게이트웨이 삽입은 Istio 사이드카 삽입과 동일한 메커니즘을 사용하여 Service
리소스와 페어링된 Deployment
리소스에서 게이트웨이를 생성합니다. Service
리소스는 OpenShift Container Platform 클러스터 외부에서 액세스할 수 있습니다.
전제 조건
-
cluster-admin
으로 OpenShift Container Platform 웹 콘솔에 로그인되어 있습니다. - Red Hat OpenShift Service Mesh Operator가 설치되어 있어야 합니다.
- Istio 리소스를 배포해야 합니다.
프로세스
CLI에서 다음 명령을 실행하여
istio-ingressgateway
배포 및 서비스를 생성합니다.$ oc apply -n info -f ingress-gateway.yaml
참고이 예에서는 Istio 커뮤니티 리포지토리에서 사용할 수 있는 샘플
ingress-gateway.yaml
파일을 사용합니다.게이트웨이 구성을 적용하여 새 게이트웨이를 사용하도록
info
애플리케이션을 구성합니다.$ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/networking/bookinfo-gateway.yaml -n bookinfo
참고info
애플리케이션을 사용하여 게이트웨이 삽입을 구성하기 위해 이 예제에서는 애플리케이션이 설치된 네임스페이스에 적용해야 하는 샘플 게이트웨이 구성 파일을 사용합니다.경로를 사용하여 클러스터 외부에 게이트웨이를 노출합니다.
$ oc expose service istio-ingressgateway -n info
Ingress 트래픽이 증가하면 Pod를 자동으로 스케일링합니다. 이 예에서는 최소 복제본을
2
로 설정하고 최대 복제본을5
로 설정합니다. 또한 사용률이 80%에 도달하면 다른 복제본도 생성합니다.apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: labels: istio: ingressgateway release: istio name: ingressgatewayhpa namespace: istio-ingress spec: maxReplicas: 5 metrics: - resource: name: cpu target: averageUtilization: 80 type: Utilization type: Resource minReplicas: 2 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: istio-ingressgateway
노드에서 실행해야 하는 최소 Pod 수를 지정합니다. 이 예에서는 새 노드에서 Pod가 다시 시작되면 하나의 복제본이 실행 중인지 확인합니다.
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: labels: istio: ingressgateway release: istio name: ingressgatewaypdb namespace: istio-ingress spec: minAvailable: 1 selector: matchLabels: istio: ingressgateway
게이트웨이 호스트 이름과 제품 페이지의 URL을 가져옵니다.
$ HOST=$(oc get route istio-ingressgateway -n info -o jsonpath='{.spec.host}') $ echo productpage URL: http://$HOST/productpage
-
웹 브라우저에서
productpage
에 액세스할 수 있는지 확인합니다.
1.5.4. 게이트웨이 API를 사용하여 Bookinfo 애플리케이션에 액세스
Kubernetes 게이트웨이 API는 게이트웨이 리소스를 생성하여 게이트웨이
를 배포합니다. OpenShift Container Platform 4.15 이상 버전에서 클러스터에서 Gateway API CRD를 사용하려면 기본적으로 비활성화되어 있으므로 CRD를 활성화해야 합니다.
Red Hat은 Red Hat OpenShift Service Mesh에서 Kubernetes Gateway API 사용을 지원합니다. Red Hat은 Kubernetes Gateway API CRD(사용자 정의 리소스 정의)를 지원하지 않습니다. 이 절차에서는 데모 목적으로만 커뮤니티 게이트웨이 API CRD를 사용하는 것으로 표시됩니다.
사전 요구 사항
-
cluster-admin
으로 OpenShift Container Platform 웹 콘솔에 로그인되어 있습니다. - Red Hat OpenShift Service Mesh Operator가 설치되어 있어야 합니다.
- Istio 리소스를 배포해야 합니다.
-
프로세스
게이트웨이 API CRD를 활성화합니다.
$ oc get crd gateways.gateway.networking.k8s.io &> /dev/null || { oc kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.0.0" | oc apply -f -; }
Gateway
리소스 및HTTPRoute
리소스를 사용하여 게이트웨이를 생성하고 구성합니다.$ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/gateway-api/bookinfo-gateway.yaml -n bookinfo
참고Gateway API를 사용하여
info
애플리케이션으로 게이트웨이를 구성하려면 이 예제에서는 애플리케이션이 설치된 네임스페이스에 적용해야 하는 샘플 게이트웨이 구성 파일을 사용합니다.Gateway API 서비스가 준비되었으며 주소가 할당되어 있는지 확인합니다.
$ oc wait --for=condition=programmed gtw info-gateway -n bookinfo
호스트, 포트 및 게이트웨이 URL을 검색합니다.
$ export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}') $ export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}') $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
게이트웨이 호스트 이름과 제품 페이지의 URL을 가져옵니다.
$ echo "http://${GATEWAY_URL}/productpage"
-
웹 브라우저에서
productpage
에 액세스할 수 있는지 확인합니다.