2.15. 网关迁移
作为网络管理员,部署入口和出口网关的首选方法是使用网关注入的 Deployment
资源。
2.15.1. 关于网关迁移
在 Red Hat OpenShift Service Mesh 2.x 中,Service Mesh Operator 默认在 control plane 命名空间中创建入口和出口网关。您可以在 ServiceMeshControlPlane
资源中定义额外的网关。
使用网关注入使用 Deployment
资源部署入口和出口网关提供了更大的灵活性和控制。这种部署方法是一种更好的做法,因为它允许您管理网关以及相应的应用,而不是在 control plane 资源中管理。因此,您应该禁用默认网关,离开 Service Mesh Control Plane 声明,并开始使用网关注入。
2.15.2. 从 SMCP-Defined 网关迁移到网关注入
此流程解释了如何使用零停机时间从 ServiceMeshControlPlane
资源中定义的网关迁移到使用网关注入管理的网关。此迁移是通过使用现有网关 Service
对象为目标的新网关部署来实现,该部署使用网关注入创建。
先决条件
-
以
cluster-admin
用户身份登录到 OpenShift Container Platform Web 控制台。 - 必须安装 Red Hat OpenShift Service Mesh Operator。
-
ServiceMeshControlPlane
资源必须部署,且配置中存在入口网关。
流程
创建新的入口网关,配置为使用网关注入。
注意此流程从
ServiceMeshControlPlane
资源中定义的默认入口网关部署迁移到网关注入。该流程可以被修改,以便从 SMCP 中配置的额外入口网关迁移。带有网关注入的 ingress 网关资源示例
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>
-
重复运行前面的两个命令。每次,增加新网关部署的副本数量,并减少旧网关部署的副本数量。继续重复,直到新网关部署处理到网关
Service
对象的所有流量。
运行以下命令,从网关
Service
对象中删除app.kubernetes.io/managed-by
标签:$ oc label service -n istio-system istio-ingressgateway app.kubernetes.io/managed-by-
删除标签可防止在
ServiceMeshControlPlane
资源中禁用网关时删除服务。运行以下命令,从网关
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}]'
注意当禁用旧的 ingress 网关
Service
对象时,它不会被删除。您可以将此Service
对象保存到文件中,并将其与新的网关注入资源一起进行管理。