2.15. 게이트웨이 마이그레이션
네트워크 관리자로서 수신 및 송신 게이트웨이를 배포하는 기본 방법은 게이트웨이 삽입을 사용하여 Deployment
리소스를 사용하는 것입니다.
2.15.1. 게이트웨이 마이그레이션 정보
Red Hat OpenShift Service Mesh 2.x에서 Service Mesh Operator는 기본적으로 컨트롤 플레인 네임스페이스에 수신 및 송신 게이트웨이를 생성합니다. ServiceMeshControlPlane
리소스에서 추가 게이트웨이를 정의할 수 있습니다.
게이트웨이 삽입을 사용하여 배포 리소스로 수신 및 송신 게이트웨이를 배포하면 유연성 및 제어가 향상됩니다. 이 배포 접근 방식은 컨트롤 플레인 리소스가 아닌 해당 애플리케이션과 함께 게이트웨이를 관리할 수 있기 때문에 더 나은 방법입니다. 따라서 기본 게이트웨이를 비활성화하고, Service Mesh Control Plane 선언에서 벗어나 게이트웨이 삽입을 사용해야 합니다.
2.15.2. SMCP 정의 게이트웨이에서 게이트웨이 삽입으로 마이그레이션
다음 절차에서는 ServiceMeshControlPlane
리소스에 정의된 게이트웨이에서 게이트웨이 주입을 사용하여 관리되는 게이트웨이로 제로 다운타임으로 마이그레이션하는 방법을 설명합니다. 이 마이그레이션은 기존 게이트웨이 서비스
오브젝트를 사용하여 게이트웨이 주입을 사용하여 생성된 새 게이트웨이 배포를 대상으로 합니다.
사전 요구 사항
-
cluster-admin
으로 OpenShift Container Platform 웹 콘솔에 로그인되어 있습니다. - Red Hat OpenShift Service Mesh Operator가 설치되어 있어야 합니다.
-
ServiceMeshControlPlane
리소스를 배포해야 하며 구성에 수신 게이트웨이가 있습니다.
프로세스
게이트웨이 삽입을 사용하도록 구성된 새 수신 게이트웨이를 만듭니다.
참고이 절차에서는
ServiceMeshControlPlane
리소스에 정의된 기본 수신 게이트웨이 배포에서 게이트웨이 삽입으로 마이그레이션됩니다. SMCP에 구성된 추가 수신 게이트웨이에서 마이그레이션하도록 절차를 수정할 수 있습니다.게이트웨이 삽입이 있는 수신 게이트웨이 리소스의 예
apiVersion: apps/v1 kind: Deployment metadata: name: istio-ingressgateway-canary namespace: istio-system 1 spec: selector: matchLabels: app: istio-ingressgateway istio: ingressgateway template: metadata: annotations: inject.istio.io/templates: gateway labels: 2 app: istio-ingressgateway istio: ingressgateway sidecar.istio.io/inject: "true" spec: containers: - name: istio-proxy image: auto serviceAccountName: istio-ingressgateway --- apiVersion: v1 kind: ServiceAccount metadata: name: istio-ingressgateway namespace: istio-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: secret-reader namespace: istio-system rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: istio-ingressgateway-secret-reader namespace: istio-system roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: secret-reader subjects: - kind: ServiceAccount name: istio-ingressgateway --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy 3 metadata: name: gatewayingress namespace: istio-system spec: podSelector: matchLabels: istio: ingressgateway ingress: - {} policyTypes: - Ingress
새 게이트웨이 배포가 요청을 성공적으로 처리하고 있는지 확인합니다.
ServiceMeshControlPlane
리소스에서 액세스 로깅이 구성된 경우 새 게이트웨이 배포의 액세스 로그를 확인하여 동작을 확인합니다.이전 배포를 축소하고 새 배포를 확장합니다.
다음 단계를 수행하여 이전 게이트웨이 배포에서 새 게이트웨이 배포로 트래픽을 점진적으로 변경합니다.
다음 명령을 실행하여 새 게이트웨이 배포의 복제본 수를 늘립니다.
$ oc scale -n istio-system deployment/<new_gateway_deployment> --replicas <new_number_of_replicas>
다음 명령을 실행하여 이전 게이트웨이 배포의 복제본 수를 줄입니다.
$ oc scale -n istio-system deployment/<old_gateway_deployment> --replicas <new_number_of_replicas>
-
이전 두 명령을 실행하여 반복합니다. 새 게이트웨이 배포의 복제본 수를 늘리고 이전 게이트웨이 배포의 복제본 수를 줄입니다. 새 게이트웨이 배포에서 gateway
Service
오브젝트에 대한 모든 트래픽을 처리할 때까지 계속 반복합니다.
다음 명령을 실행하여 gateway
Service
오브젝트에서app.kubernetes.io/managed-by
레이블을 제거합니다.$ oc label service -n istio-system istio-ingressgateway app.kubernetes.io/managed-by-
라벨을 제거하면
ServiceMeshControlPlane
리소스에서 게이트웨이가 비활성화될 때 서비스가 삭제되지 않습니다.다음 명령을 실행하여 gateway
Service
오브젝트에서ownerReferences
오브젝트를 제거합니다.$ oc patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "remove", "path": "/metadata/ownerReferences"}]'
이 오브젝트를 제거하면
ServiceMeshControlPlane
리소스가 삭제될 때 서비스가 가비지 수집되지 않습니다.다음 명령을 실행하여
ServiceMeshControlPlane
리소스에서 관리하는 이전 게이트웨이 배포를 비활성화합니다.$ oc patch smcp -n istio-system <smcp_name> --type='json' -p='[{"op": "replace", "path": "/spec/gateways/ingress/enabled", "value": false}]'
참고이전 수신 게이트웨이
Service
개체가 비활성화되면 삭제되지 않습니다. 이Service
오브젝트를 파일에 저장하고 새 게이트웨이 삽입 리소스와 함께 관리할 수 있습니다.