簡體   English   中英

如何使用 docker 桌面將 kubernetes 集群連接到外部 SQL Server 數據庫?

[英]How do I connect a kubernetes cluster to an external SQL Server database using docker desktop?

我需要知道如何將我的 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”,恰好在您的機器上運行。

host.docker.internal: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

問題可能出在您提供的服務類型上。 ClusterIP使您只需在集群內的 pod 之間進行連接。 要連接到外部服務,您只需將服務種類的定義更改為NodePort

嘗試更改服務定義:

#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

並執行命令:

$ kubectl apply -f your_service_definition_file_name.yaml 

請記住在適當的命名空間中運行此命令,其中配置了您的部署。

不好的做法是將環境變量覆蓋到容器上。 並使用“docker run”將該環境變量VALUE傳遞給容器。

當然在執行 docker 命令的上下文中

$ 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-password 設置為可見是不安全的。 使用 Kubernetes 機密。

您可以在此處找到更多信息: kubernetes-secret

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM