如何使用 docker 桌面将 kubernetes 集群连接到外部 SQL Server 数据库?

C1p*_*710 7 sql-server powershell docker kubernetes

我需要知道如何将我的 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
    
    Run Code Online (Sandbox Code Playgroud)
  • 定义.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
    
    Run Code Online (Sandbox Code Playgroud)

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

gra*_*der 1

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

主机.docker.内部:1433

上面是 docker 容器与本地机器的对话。显然,端口可能会有所不同,具体取决于您公开它的方式。

......

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

服务器名称:

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

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

my-mssql-service-deployment-name 是您的部署的名称(我将其存根在这里)

请注意,此处没有端口号。

此处记录了这一点:

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