Menu Close

4.8.3. 绑定不符合 PodSpec 的辅助工作负载

服务绑定中的典型场景涉及配置后备服务、工作负载(Deployment)和 Service Binding Operator。考虑涉及次要工作负载(也可以是应用程序 Operator)的场景,它与 PodSpec 不兼容,在主工作负载(Deployment)和 Service Binding Operator 之间。

对于此类辅助工作负载资源,容器路径的位置是任意的。对于服务绑定,如果 CR 中的次要工作负载与 PodSpec 不合规,则必须指定容器路径的位置。这样做会项目绑定数据到 ServiceBinding CR 的次要工作负载中指定的容器路径中,例如,当您不希望 pod 中的绑定数据时。

Service Binding Operator 提供了选项来配置容器路径或 secret 路径的位置,并在自定义位置绑定这些路径。只有在绑定数据作为环境变量投射时,这个选项才可用于 binding.operators.coreos.com API 组。

4.8.3.1. 配置容器路径的自定义位置

考虑辅助工作负载 CR,它与 PodSpec 不兼容,且容器位于 spec.containers 路径中:

示例:次要工作负载 CR

apiVersion: "operator.sbo.com/v1"
kind: SecondaryWorkload
metadata:
    name: secondary-workload
spec:
    containers:
    - name: hello-world
      image: quay.io/baijum/secondary-workload:latest
      ports:
      - containerPort: 9966

以下示例演示了如何通过在 ServiceBinding CR 中指定一个值来配置 spec.containers 路径,并将此路径绑定到 spec.application.bindingPath.containersPath 自定义位置:

示例: ServiceBinding CR,带有自定义位置的 spec.containers 路径

apiVersion: binding.operators.coreos.com/v1alpha1
kind: ServiceBinding
metadata:
    name: spring-petclinic-rest
spec:
    services:
    - group: postgres-operator.crunchydata.com
      version: v1beta1
      kind: PostgresCluster
      name: hippo
      id: postgresDB
    - group: ""
      version: v1
      kind: Secret
      name: hippo-pguser-hippo
      id: postgresSecret
    application: 1
      name: spring-petclinic-rest
      group: apps
      version: v1
      resource: deployments
    application: 2
      name: secondary-workload
      group: operator.sbo.com
      version: v1
      resource: secondaryworkloads
      bindingPath:
        containersPath: spec.containers 3

1
示例应用程序,指向带有嵌入式 PodSpec 的 Deployment 或任何其他类似资源。
2
辅助工作负载,不符合 PodSpec 的要求。
3
容器路径的自定义位置。

指定容器路径的位置后,Service Binding Operator 会生成绑定数据,这会在 ServiceBinding CR 的辅助工作负载中指定的容器路径中可用。

以下示例显示了带有 envFromsecretRef 字段的 spec.containers 路径:

示例:带有 envFromsecretRef 字段的辅助工作负载 CR

apiVersion: "operator.sbo.com/v1"
kind: SecondaryWorkload
metadata:
    name: secondary-workload
spec:
    containers:
    - env: 1
      - name: ServiceBindingOperatorChangeTriggerEnvVar
        value: "31793"
      envFrom:
      - secretRef:
          name: secret-resource-name 2
      image: quay.io/baijum/secondary-workload:latest
      name: hello-world
      ports:
      - containerPort: 9966
      resources: {}

1
使用 Service Binding Operator 生成的值的唯一容器数组。这些值基于后备服务 CR。
2
Service Binding Operator 生成的 Secret 资源的名称。