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