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

能否修改GCP Cloud Composer环境配置?SQL Server连接问题求助

解决Cloud Composer连接SQL Server 2012的SSL协议不支持问题

问题背景

连接SQL Server 2012时触发如下错误:

pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol] (-1) (SQLDriverConnect)')

原因是SQL Server 2012仅支持旧版SSL/TLS协议(如TLS 1.0、TLS 1.1),而ODBC Driver 17默认禁用了这些协议,需要调整SSL配置以兼容。手动修改容器配置无法应对Cloud Composer自动扩缩容,需采用全局配置方案。

可行配置方案

方案1:通过Cloud Composer环境变量全局配置

在Cloud Composer环境中添加以下环境变量,强制启用旧版SSL/TLS协议:

  • 变量名:OPENSSL_ALLOW_PROTOCOLS,值:TLSv1,TLSv1.1,TLSv1.2
  • 变量名:SSL_CIPHERS,值:DEFAULT@SECLEVEL=1

配置步骤:

  1. 打开GCP控制台,进入Cloud Composer环境详情页
  2. 点击环境变量标签页
  3. 点击添加变量,分别添加上述两个环境变量
  4. 保存后,Cloud Composer会自动重启所有Worker和Web服务器,配置全局生效

方案2:使用自定义Pod模板挂载修改后的openssl.cnf

如果环境变量方案不生效,可通过自定义Pod模板挂载调整后的openssl配置文件:

  1. 准备修改后的openssl.cnf,在[system_default_sect]段添加:
    MinProtocol = TLSv1
    CipherString = DEFAULT@SECLEVEL=1
    
  2. 将文件上传到GCS存储桶(如gs://your-composer-bucket/config/openssl.cnf)
  3. 创建自定义Pod模板yaml文件,添加卷挂载配置:
    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        component: worker
        tier: airflow
    spec:
      containers:
        - args: []
          command: []
          env: []
          image: ''
          name: airflow-worker
          volumeMounts:
            - mountPath: /etc/ssl/openssl.cnf
              name: openssl-config
              subPath: openssl.cnf
      volumes:
        - name: openssl-config
          configMap:
            name: openssl-config
    
  4. 通过GCP命令行创建ConfigMap:
    kubectl create configmap openssl-config --from-file=openssl.cnf=gs://your-composer-bucket/config/openssl.cnf
    
  5. 在Cloud Composer环境中配置自定义Pod模板:
    • 进入环境详情页,点击编辑
    • 在工作负载配置下的Pod模板中,选择刚才创建的模板文件
    • 保存并等待环境更新完成

方案3:在Airflow任务中临时设置环境变量

如果仅需特定任务兼容,可在DAG中为任务设置环境变量:

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime
import os
import pyodbc

def connect_sql_server():
    # 临时设置SSL相关环境变量
    os.environ['OPENSSL_ALLOW_PROTOCOLS'] = 'TLSv1,TLSv1.1,TLSv1.2'
    os.environ['SSL_CIPHERS'] = 'DEFAULT@SECLEVEL=1'
    
    # 建立连接
    conn = pyodbc.connect(
        'DRIVER={ODBC Driver 17 for SQL Server};'
        'SERVER=your-sql-server;'
        'DATABASE=your-db;'
        'UID=user;'
        'PWD=password'
    )
    # 执行操作
    cursor = conn.cursor()
    cursor.execute('SELECT 1')
    result = cursor.fetchone()
    print(result)
    conn.close()

with DAG('sql_server_connection', schedule_interval=None, start_date=datetime(2023, 1, 1)) as dag:
    task = PythonOperator(
        task_id='connect_sql_server',
        python_callable=connect_sql_server
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:23:15