Skip to main content
 首页 » 编程设计

sql-server之如何使用 docker desktop 将 kubernetes 集群连接到外部 SQL Server 数据库

2024年10月24日18langtianya

我需要知道如何将我的 Kubernetes 集群连接到在 Kubernetes 集群外部的 docker 镜像中运行的外部 SQL Server 数据库。

我的集群中目前有两个 pod 正在运行,每个 pod 中都有一个从 asp.net 核心应用程序创建的不同图像。有一个完全独立的(在 Kubernetes 之外,但在我的机器 localhost,1433 上本地运行)托管 SQL Server 数据库的 docker 镜像。我需要 Kubernetes pod 中的应用程序能够访问和操作该数据库。我已经尝试创建一个 YAML 文件并配置不同的端口,但我不知道如何让它工作,或者如何在设置后测试它是否真的工作。我需要确切的步骤/命令来创建能够将连接从集群中的图像路由到数据库并返回的服务。

  • Docker SQL Server 创建(提升的 powershell/docker 桌面):
    docker pull mcr.microsoft.com/mssql/server:2017-latest 
     
    docker run -d -p 1433:1433 --name sql -v "c:/Temp/DockerShared:/host_mount" -e SA_PASSWORD="aPasswordPassword" -e ACCEPT_EULA=Y mcr.microsoft.com/mssql/server:2017-latest 
    
  • 定义.yaml
    #Pods in the cluster 
    apiVersion: v1 
    kind: Pod 
    metadata: 
      name: pod-1 
      labels: 
        app: podnet 
        type: module 
    spec: 
      containers: 
       - name: container1 
         image: username/image1 
     
    --- 
     
    apiVersion: v1 
    kind: Pod 
    metadata: 
      name: pod-2 
      labels: 
        app: podnet 
        type: module 
    spec: 
      containers: 
       - name: container2 
         image: username/image2 
     
    --- 
    #Service created in an attempt to contact external SQL Server DB 
    apiVersion: v1 
    kind: Service 
    metadata: 
     name: ext-sql-service 
    spec: 
     ports: 
     - port: 1433 
       targetPort: 1433 
    type: ClusterIP 
    --- 
    apiVersion: v1 
    kind: Endpoints 
    metadata: 
     name: ext-sql-service 
    subsets: 
     - addresses: 
         - ip: (Docker IP for DB Instance) 
       ports: 
         - port: 1433 
    

  • 理想情况下,我希望我的 kubernetes 集群中的应用程序能够操作我已经设置的 SQL Server(在集群外部但在我的机器上本地运行)。

    请您参考如下方法:

    从本地 docker 运行时,您的连接字符串不是您的本地机器。
    它是本地 docker “world”,恰好在您的机器上运行。

    主机.docker.internal:1433

    以上是 docker 容器与您的本地机器对话。显然,端口可能会根据您公开它的方式而有所不同。

    ……

    如果您试图让正在运行的容器与也在 docker 世界中运行的 sql-server 通信,则该连接字符串如下所示:

    服务器名称:

    my-mssql-service-deployment-name.$_CUSTOMNAMESPACENAME.svc.cluster.local

    其中 $_CUSTOMNAMESPACENAME 可能是“默认”,但您可能正在运行不同的命名空间。

    my-mssql-service-deployment-name 是您的部署的名称(我在这里 stub )

    注意这里没有端口号。

    这记录在这里:

    https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#services