You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过配置文件为Kubernetes/Crossplane YAML传递参数

在Crossplane中实现配置变量注入的几种方式

1. 使用Kubernetes ConfigMap + Crossplane Composition(推荐)

通过Composition将ConfigMap中的配置值注入到资源字段,实现类似配置文件的管理机制:

步骤1:创建存储配置的ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: vcn-config
data:
  vcn-name: "my-custom-vcn"
  compartment-name: "my-prod-compartment"
  display-name: "Production VCN"

步骤2:编写Composition绑定ConfigMap值

定义Composition模板,从ConfigMap读取值并填充到VCN资源的对应字段:

apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: compositevcns.example.org
spec:
  compositeTypeRef:
    apiVersion: example.org/v1alpha1
    kind: CompositeVcn
  resources:
    - name: vcn
      base:
        apiVersion: core.oci.upbound.io/v1alpha1
        kind: Vcn
        spec:
          forProvider:
            cidrBlocks: ["10.0.0.0/16"]
      patches:
        # 从ConfigMap取vcn-name填充metadata.name
        - type: FromCompositeFieldPath
          fromFieldPath: spec.config.vcnName
          toFieldPath: metadata.name
        # 从ConfigMap取compartment-name填充compartmentIdRef.name
        - type: FromCompositeFieldPath
          fromFieldPath: spec.config.compartmentName
          toFieldPath: spec.forProvider.compartmentIdRef.name
        # 从ConfigMap取display-name填充displayName
        - type: FromCompositeFieldPath
          fromFieldPath: spec.config.displayName
          toFieldPath: spec.forProvider.displayName
      connectionDetails:
        - name: config
          fromConfigMap:
            name: vcn-config
            keys:
              - vcn-name
              - compartment-name
              - display-name

步骤3:创建CompositeResource引用配置

通过CompositeResource实例关联ConfigMap中的配置:

apiVersion: example.org/v1alpha1
kind: CompositeVcn
metadata:
  name: prod-vcn
spec:
  config:
    vcnName: $(config.vcn-name)
    compartmentName: $(config.compartment-name)
    displayName: $(config.display-name)

2. 使用环境变量 + Crossplane ProviderConfig

如果需要通过环境变量传递(类似Terraform的TF_VAR机制),可以在ProviderConfig中引用环境变量,再通过资源关联注入:

步骤1:配置ProviderConfig引用环境变量

apiVersion: oci.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: oci-prod
spec:
  credentials:
    source: Environment
    environment:
      variable: OCI_CREDENTIALS
  # 自定义字段存储变量
  configuration:
    variables:
      vcnName: ${VCN_NAME}
      compartmentName: ${COMPARTMENT_NAME}
      displayName: ${DISPLAY_NAME}

步骤2:在VCN资源中引用ProviderConfig变量

通过Crossplane补丁机制或模板渲染工具替换环境变量值:

apiVersion: core.oci.upbound.io/v1alpha1
kind: Vcn
metadata:
  name: ${VCN_NAME}
spec:
  providerConfigRef:
    name: oci-prod
  forProvider:
    compartmentIdRef: 
      name: ${COMPARTMENT_NAME}
    displayName: ${DISPLAY_NAME}
    cidrBlocks: ["10.0.0.0/16"]

3. 使用Kustomize Vars(轻量方案)

如果不想用Composition,直接用Kustomize的变量替换功能实现配置注入:

步骤1:创建kustomization.yaml定义变量

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - vcn.yaml
replacements:
  - source:
      fieldPath: data.vcn-name
      kind: ConfigMap
      name: vcn-config
    targets:
      - fieldPath: metadata.name
        kind: Vcn
        name: vcn-via-crossplane
  - source:
      fieldPath: data.compartment-name
      kind: ConfigMap
      name: vcn-config
    targets:
      - fieldPath: spec.forProvider.compartmentIdRef.name
        kind: Vcn
        name: vcn-via-crossplane
  - source:
      fieldPath: data.display-name
      kind: ConfigMap
      name: vcn-config
    targets:
      - fieldPath: spec.forProvider.displayName
        kind: Vcn
        name: vcn-via-crossplane

步骤2:应用Kustomize配置

执行命令生成并应用最终的VCN资源:

kustomize build . | kubectl apply -f -

内容的提问来源于stack exchange,提问作者Shubham Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:30:14