首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用docker桌面将kubernetes集群连接到外部Server数据库?

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

Stack Overflow用户
提问于 2019-06-13 16:11:12
回答 2查看 12.8K关注 0票数 8

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

目前,我的集群中有两个正在运行的豆荚,每个荚中都有一个从asp.net核心应用程序中创建的不同映像。有一个完全独立的( Kubernetes之外,但在我的机器localhost,1433)本地运行的对接者映像,承载了一个Server数据库。我需要我的Kubernetes吊舱中的应用程序才能到达和操作数据库。我尝试过创建YAML文件并配置不同的端口,但我不知道如何使其工作,也不知道如何在设置它之后测试它是否实际工作。我需要准确的步骤/命令来创建能够将连接从集群中的映像路由到DB和back的服务。

  • Docker SQL Server创建(提升的powershell/docker桌面): docker拉出mcr.microsoft.com/mssql/server:2017-最新的-d -p 1433:1433 -名称为sql -v“c:/Temp/DockerShared:/host_ SA_PASSWORD="aPasswordPassword”-e ACCEPT_EULA=Y mcr.microsoft.com/mssql/server:2017“
  • definitions.yaml #集群apiVersion: v1种类: Pod元数据:名称:po-1标签: app: podnet类型:模块规范:-名称: container1图像:username/Image1--apiVersion: v1种类: v1元数据:名称:po-2标签: app: podnet类型:模块规范:容器: container2图像: username/image2 --#服务创建于试图联系外部Server apiVersion: v1类别:服务元数据:名称: ext-sql-service spec:端口:- targetPort: 1433类型: ClusterIP -- apiVersion: v1种类:终结点元数据: name: ext-sql-service子集:-地址:- ip:( DB实例的Docker)端口:- port: 1433

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

EN

回答 2

Stack Overflow用户

发布于 2019-06-13 17:56:39

从本地停靠程序运行时,连接字符串不是本地机器。这是当地的码头“世界”,正好运行在您的机器上。

host.docker.internal:1433

以上是码头集装箱与您的本地机器交谈。显然,根据您公开它的方式,端口可能是不同的。

.

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

ServerName:

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

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

mssql service- deployment是您的部署的名称(我在这里对它进行了剪短)

注意这里没有端口号。

这里记录了这一点:

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

票数 1
EN

Stack Overflow用户

发布于 2019-07-02 09:48:07

问题可能在于你所提供的服务。ClusterIP使您能够在集群内的豆荚之间进行最简单的连接。要连接到外部服务,只需将服务种类的定义更改为NodePort

尝试更改服务定义:

代码语言:javascript
复制
#Service created in an attempt to contact external SQL Server DB
apiVersion: v1
kind: Service
metadata:
 name: ext-sql-service
spec:
 type: NodePort
 ports:
 - port: 1433
   targetPort: 1433

并执行命令:

代码语言:javascript
复制
$ kubectl apply -f your_service_definition_file_name.yaml 

请记住在正确的命名空间中运行此命令,其中配置了您的部署。

错误的做法是将一个环境变量覆盖到容器上。使用"docker“,将环境变量传递给容器。

当然,在执行docker命令的上下文中

代码语言:javascript
复制
$ 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

使db-密码可见是不安全的。利用库伯奈特的秘密。

您可以在这里找到更多信息:库伯奈特斯秘密

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56584616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档