1.3. 将 Service Mesh 与 OpenShift Serverless 集成
您可以在不使用 Kourier 作为默认入口的情况下将 Service Mesh 与 OpenShift Serverless 集成。要做到这一点,在完成以下步骤前不要安装 Knative Serving 组件。在创建 KnativeServing
自定义资源定义 (CRD) 以将 Knative Serving 与 Service Mesh 集成时,还需要额外的步骤,这没有在一般的 Knative Serving 安装过程中覆盖。如果您要将 Service Mesh 集成为 OpenShift Serverless 安装的默认的且唯一的 ingress,这个步骤可能很有用。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以创建应用程序和其他工作负载。
安装 Red Hat OpenShift Service Mesh Operator,并在
istio-system
命名空间中创建ServiceMeshControlPlane
资源。如果要使用 mTLS 功能,还必须将ServiceMeshControlPlane
资源的spec.security.dataPlane.mtls
字段设置为true
。重要在 Service Mesh 中使用 OpenShift Serverless 只支持 Red Hat OpenShift Service Mesh 2.0.5 或更高版本。
- 安装 OpenShift Serverless Operator。
-
安装 OpenShift CLI (
oc
) 。
流程
将您要与 Service Mesh 集成的命名空间作为成员添加到
ServiceMeshMemberRoll
对象中:apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default namespace: istio-system spec: members: 1 - knative-serving - <namespace>
- 1
- 要与 Service Mesh 集成的命名空间列表。
重要此命名空间列表必须包含
knative-serving
命名空间。应用
ServiceMeshMemberRoll
资源:$ oc apply -f <filename>
创建必要的网关,以便 Service Mesh 可以接受流量:
使用 HTTP 的
knative-local-gateway
对象示例apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-ingress-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS hosts: - "*" tls: mode: SIMPLE credentialName: <wildcard_certs> 1 --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-local-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 8081 name: http protocol: HTTP 2 hosts: - "*" --- apiVersion: v1 kind: Service metadata: name: knative-local-gateway namespace: istio-system labels: experimental.istio.io/disable-gateway-port-translation: "true" spec: type: ClusterIP selector: istio: ingressgateway ports: - name: http2 port: 80 targetPort: 8081
使用 HTTPS 的
knative-local-gateway
对象示例apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-local-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS hosts: - "*" tls: mode: SIMPLE credentialName: <wildcard_certs>
应用
Gateway
资源:$ oc apply -f <filename>
通过创建以下
KnativeServing
自定义资源定义 (CRD) 来安装 Knative Serving,该定义还启用了 Istio 集成:apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: ingress: istio: enabled: true 1 deployments: 2 - name: activator annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: autoscaler annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true"
应用
KnativeServing
资源:$ oc apply -f <filename>
创建一个启用了 sidecar 注入并使用 pass-through 路由的 Knative Service:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> namespace: <namespace> 1 annotations: serving.knative.openshift.io/enablePassthrough: "true" 2 spec: template: metadata: annotations: sidecar.istio.io/inject: "true" 3 sidecar.istio.io/rewriteAppHTTPProbers: "true" spec: containers: - image: <image_url>
应用
Service
资源:$ oc apply -f <filename>
验证
使用 CA 信任的安全连接访问无服务器应用程序:
$ curl --cacert root.crt <service_url>
示例命令
$ curl --cacert root.crt https://hello-default.apps.openshift.example.com
输出示例
Hello Openshift!