我正试图在我的本地Docker Desktop实例上运行SQL Server,但在Kubernetes模式下运行时,出现了奇怪的错误。我的k8s.yaml文件有错误吗?
如果我使用这个yaml命令 docker-compose up
来启动它,它可以正常工作:
version: '3'
services:
db:
image: "mcr.microsoft.com/mssql/server:2019-latest"
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=C@mpl3xEn0#gh!
ports:
- "1433:1433"
network_mode: bridge
然后我使用sqlcmd -U sa -P C@mpl3xEn0#gh! -S localhost,1433
测试连接,它连接得很好。
如果我按照 https://learn.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes 的说明使用kubectl apply -f k8s.yaml
启动它,我将遇到连接错误:
# based loosely on https://learn.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes#create-the-deployment
apiVersion: v1
kind: Pod
metadata:
name: db
spec:
containers:
- name: db
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- containerPort: 1433
env:
- name: ACCEPT_EULA
value: 'Y'
- name: SA_PASSWORD
value: C@mpl3xEn0#gh!
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: db
spec:
type: NodePort
selector:
app: db
ports:
- protocol: TCP
port: 1433
targetPort: 1433
然后我尝试使用
sqlcmd -U sa -P C@mpl3xEn0#gh! -S localhost,31043
(将kubectl get svc/db
中的NodePort替换掉)从本地机器连接,但是出现了以下错误:
使用Azure Data Studio和SSMS时也会出现相同的错误。与服务器成功建立连接,但在预登录握手期间发生错误。(提供程序:TCP 提供程序,错误:0 - 远程主机强制关闭了一个现有的连接。)
如果我使用
kubectl exec ...
进入容器并运行/opt/mssql-tools/bin/sqlcmd -U sa -P C@mpl3xEn0#gh! -S localhost,1433
,它可以正常连接。在我的k8s.yaml文件中出现了什么错误,导致SQL Server在Kubernetes中运行时无法接受连接?
我已经尝试设置
encrypt=false;trustServerCertificate=true;
,但结果没有改变。