![](/img/trans.png)
[英]How do I connect the local SQL Server database for the ASP.NET Core application running inside either local Docker or Kubernetes?
[英]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.