sql-server - kubernetes : an error occurred during the pre-login handshake 上的 SQL Server

标签 sql-server docker kubernetes

我正在尝试在我的本地 Docker Desktop 实例上运行 SQL Server,当以 Kubernetes 模式运行时,我收到了一个奇怪的错误。我的 k8s.yaml 文件有错误吗?

如果我用 docker-compose up 和这个 yaml 启动它,它工作正常:

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),我得到错误:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

我从 Azure Data Studio 和 SSMS 得到同样的错误。

如果我 kubectl exec ... 进入容器并运行 /opt/mssql-tools/bin/sqlcmd -U sa -P C@mpl3xEn0#gh! -S localhost,1433 连接正常。

导致 SQL Server 在 Kubernetes 中运行时不接受连接的 k8s.yaml 文件中的错误在哪里?

我试过设置 encrypt=false;trustServerCertificate=true; 结果没有改变。

最佳答案

错别字又惹我生气了。这是缺少的 yaml:

...
metadata:
  name: db
  labels: # <--
    app: db # <--
spec:
...

我忘记了 labels: 部分。因此,该服务小心地将流量转发到没有进行 TLS 握手的任何内容,并向我提供了错误的错误。

关于sql-server - kubernetes : an error occurred during the pre-login handshake 上的 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64917058/

相关文章:

sql - 在 SSIS 2012 的 OLE DB 源中使用动态 SQL

c# - 从具有多个项目的解决方案构建 docker 容器

sql - 随着时间的推移计算不同的用户

c# - 使用 SQL Server 插入 C# 后返回 id

docker - 在docker-compose.yml中使用Linux容器在Windows主机上挂载Docker卷

docker - 服务 docker 启动失败(守护进程不是 docker 命令)

ssl - 如何通过浏览器访问 Kubernetes UI?

azure - Kubernetes/Azure ACS : Why can't I access external IPs of my Service?

kubernetes - 如何将持久卷声明与 gcePersistentDisk 绑定(bind)?

SQL 计算 IP 列中的不同子网