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

ArgoCD部署Bitnami RabbitMQ时,如何从Secret读取敏感SSO配置?

解决方案:从Secret取值并在Helm安装前渲染RabbitMQ的Azure AD SSO配置

针对使用Bitnami RabbitMQ Chart配置Azure AD SSO时,不想将敏感值明文存入版本控制的需求,结合ArgoCD部署环境,提供以下可行方案:

方案1:通过Helm lookup函数直接读取集群内Secret值

利用Helm的lookup函数在模板渲染阶段读取已存在的K8s Secret中的敏感值,避免在values文件中明文存储:

  1. 创建存储敏感值的Secret
    在RabbitMQ部署的命名空间下创建Secret,存储PROVIDER_ID、CLIENT_ID、CLIENT_SECRET:

    apiVersion: v1
    kind: Secret
    metadata:
      name: rabbitmq-oauth-secrets
      namespace: your-namespace
    type: Opaque
    stringData:
      PROVIDER_ID: "your-provider-id"
      CLIENT_ID: "your-client-id"
      CLIENT_SECRET: "your-client-secret"
    

    可通过ArgoCD单独部署这个Secret,或用加密工具处理后存入版本控制。

  2. 修改values.yaml中的advancedConfiguration
    在advancedConfiguration中使用lookup函数读取Secret值:

    advancedConfiguration: |-
      [
        {rabbit, [
          {auth_backends, [rabbit_auth_backend_oauth2, rabbit_auth_backend_internal]}
        ]},
        {rabbitmq_auth_backend_oauth2, [
          {resource_server_id, <<"{{ (lookup "v1" "Secret" .Release.Namespace "rabbitmq-oauth-secrets").data.CLIENT_ID | b64dec }}">>},
          {extra_scopes_source, <<"roles">>},
          {key_config, [
            {jwks_url, <<"https://login.microsoftonline.com/{{ (lookup "v1" "Secret" .Release.Namespace "rabbitmq-oauth-secrets").data.PROVIDER_ID | b64dec }}/discovery/v2.0/keys">>}
          ]}
        ]},
        {rabbitmq_management, [
          {oauth_enabled, true},
          {oauth_client_id, "{{ (lookup "v1" "Secret" .Release.Namespace "rabbitmq-oauth-secrets").data.CLIENT_ID | b64dec }}"},
          {oauth_client_secret, "{{ (lookup "v1" "Secret" .Release.Namespace "rabbitmq-oauth-secrets").data.CLIENT_SECRET | b64dec }}"},
          {oauth_provider_url, "https://login.microsoftonline.com/{{ (lookup "v1" "Secret" .Release.Namespace "rabbitmq-oauth-secrets").data.PROVIDER_ID | b64dec }}"}
        ]}
      ].
    

    由于Chart中会通过common.tplvalues.render渲染advancedConfiguration,这些模板语法会被正确解析。

方案2:使用ArgoCD的Values from Secret功能

ArgoCD支持直接从Secret中加载Helm Values参数,将敏感值与配置文件分离:

  1. 创建存储敏感值的Secret
    在ArgoCD命名空间(或指定命名空间)创建存储敏感值的Secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: rabbitmq-oauth-values
      namespace: argocd
    type: Opaque
    stringData:
      PROVIDER_ID: "your-provider-id"
      CLIENT_ID: "your-client-id"
      CLIENT_SECRET: "your-client-secret"
    
  2. 配置ArgoCD Application引用Secret值
    在ArgoCD Application的Helm配置中,通过valueFrom引用Secret中的值,并在values模板中使用变量:

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: rabbitmq
      namespace: argocd
    spec:
      destination:
        namespace: your-namespace
        server: https://kubernetes.default.svc
      source:
        chart: rabbitmq
        repoURL: https://charts.bitnami.com/bitnami
        targetRevision: 12.x.x
        helm:
          values: |
            advancedConfiguration: |-
              [
                {rabbit, [
                  {auth_backends, [rabbit_auth_backend_oauth2, rabbit_auth_backend_internal]}
                ]},
                {rabbitmq_auth_backend_oauth2, [
                  {resource_server_id, <<"{{ .Values.CLIENT_ID }}">>},
                  {extra_scopes_source, <<"roles">>},
                  {key_config, [
                    {jwks_url, <<"https://login.microsoftonline.com/{{ .Values.PROVIDER_ID }}/discovery/v2.0/keys">>}
                  ]}
                ]},
                {rabbitmq_management, [
                  {oauth_enabled, true},
                  {oauth_client_id, "{{ .Values.CLIENT_ID }}"},
                  {oauth_client_secret, "{{ .Values.CLIENT_SECRET }}"},
                  {oauth_provider_url, "https://login.microsoftonline.com/{{ .Values.PROVIDER_ID }}"}
                ]}
              ].
          valueFrom:
            - secretKeyRef:
                name: rabbitmq-oauth-values
                key: PROVIDER_ID
            - secretKeyRef:
                name: rabbitmq-oauth-values
                key: CLIENT_ID
            - secretKeyRef:
                name: rabbitmq-oauth-values
                key: CLIENT_SECRET
      project: default
    

    ArgoCD会自动将Secret中的值注入到Helm Values中,完成渲染替换。

方案3:使用Sealed Secrets加密敏感值存入版本控制

如果需要将敏感值相关资源存入版本控制,可使用Sealed Secrets工具对Secret加密:

  1. 安装Sealed Secrets控制器
    在集群中部署Sealed Secrets控制器,用于解密SealedSecret资源。

  2. 加密Secret为SealedSecret
    使用kubeseal工具将包含敏感值的Secret加密为SealedSecret:

    kubectl create secret generic rabbitmq-oauth-secrets --namespace your-namespace --from-literal=PROVIDER_ID=your-provider-id --from-literal=CLIENT_ID=your-client-id --from-literal=CLIENT_SECRET=your-client-secret --dry-run=client -o yaml | kubeseal --format=yaml > sealed-rabbitmq-oauth-secrets.yaml
    
  3. 部署SealedSecret并结合方案1使用
    将生成的sealed-rabbitmq-oauth-secrets.yaml存入版本控制,通过ArgoCD部署。集群中的控制器会自动将其解密为普通Secret,之后即可使用方案1中的lookup函数读取值。

方案4:自定义Chart补丁修改配置逻辑

如果需要长期定制,可fork原Bitnami RabbitMQ Chart,修改config Secret的模板逻辑,直接从指定Secret中读取敏感值并拼接成完整的advanced.config内容:

  1. fork原Chart并修改模板
    修改templates/secrets/config.yaml中的advanced.config部分,将固定配置与从Secret读取的敏感值拼接:

    {{- define "rabbitmq.advanced.config" }}
    [
      {rabbit, [
        {auth_backends, [rabbit_auth_backend_oauth2, rabbit_auth_backend_internal]}
      ]},
      {rabbitmq_auth_backend_oauth2, [
        {resource_server_id, <<"{{ (lookup "v1" "Secret" .Release.Namespace .Values.oauth.secretName).data.CLIENT_ID | b64dec }}">>},
        {extra_scopes_source, <<"roles">>},
        {key_config, [
          {jwks_url, <<"https://login.microsoftonline.com/{{ (lookup "v1" "Secret" .Release.Namespace .Values.oauth.secretName).data.PROVIDER_ID | b64dec }}/discovery/v2.0/keys">>}
        ]}
      ]},
      {rabbitmq_management, [
        {oauth_enabled, true},
        {oauth_client_id, "{{ (lookup "v1" "Secret" .Release.Namespace .Values.oauth.secretName).data.CLIENT_ID | b64dec }}"},
        {oauth_client_secret, "{{ (lookup "v1" "Secret" .Release.Namespace .Values.oauth.secretName).data.CLIENT_SECRET | b64dec }}"},
        {oauth_provider_url, "https://login.microsoftonline.com/{{ (lookup "v1" "Secret" .Release.Namespace .Values.oauth.secretName).data.PROVIDER_ID | b64dec }}"}
      ]}
    ].
    {{- end }}
    
    data:
      rabbitmq.conf: |-
        {{- include "common.tplvalues.render" (dict "value" .Values.configuration "context" $) | b64enc | nindent 4 }}
      {{- if .Values.oauth.enabled }}
      advanced.config: |-
        {{- include "rabbitmq.advanced.config" . | b64enc | nindent 4 }}
      {{- end }}
    
  2. 添加values配置项
    在values.yaml中添加oauth相关配置项:

    oauth:
      enabled: true
      secretName: rabbitmq-oauth-secrets
    
  3. 使用自定义Chart部署
    将修改后的Chart存入版本控制,通过ArgoCD引用该Chart进行部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:50:46