在 kubernetes 上的 SQL Server:在预登录握手期间发生了错误。

3

我正试图在我的本地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替换掉)从本地机器连接,但是出现了以下错误:

与服务器成功建立连接,但在预登录握手期间发生错误。(提供程序:TCP 提供程序,错误:0 - 远程主机强制关闭了一个现有的连接。)

使用Azure Data Studio和SSMS时也会出现相同的错误。
如果我使用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;,但结果没有改变。

1
似乎该图像具有不兼容的TLS版本,无法进行握手。您是否尝试更改或删除服务类型,或获取另一个图像版本? - StPaulis
很有趣。@StPaulis,你在哪里找到这个信息的?虽然我还没有尝试过其他版本,但我会试一下。你推荐哪个版本? - robrich
1
我曾经在一个Swarm集群上遇到过同样的问题,很久以前。不同之处在于我使用了SQL的精简镜像,并将其转换为正常版本,解决了我的问题。我不确定是否是同样的问题,但错误信息相符。 - StPaulis
1个回答

0
打字错误又来了。这是缺失的yaml代码片段:
...
metadata:
  name: db
  labels: # <--
    app: db # <--
spec:
...

我忘记了标签:部分。因此,该服务小心地将流量转发到空白处,这没有进行TLS握手,并给我带来了错误的错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接