Saya mencoba menjalankan SQL Server pada instance Docker Desktop lokal saya, dan ketika dijalankan dalam mode Kubernetes, saya mendapatkan kesalahan aneh. Apakah ada kesalahan pada file k8s.yaml saya?

Jika saya memulainya dengan docker-compose up dan yaml ini, itu berfungsi dengan baik:

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

Kemudian saya menguji koneksi dengan sqlcmd -U sa -P C@mpl3xEn0#gh! -S localhost,1433 dan terhubung dengan baik.

Jika saya memulainya dengan kubectl apply -f k8s.yaml mengikuti instruksi dari https://docs.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes Saya mendapatkan kesalahan saat menyambungkan:

# based loosely on https://docs.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

Kemudian saya mencoba terhubung dari mesin lokal saya menggunakan sqlcmd -U sa -P C@mpl3xEn0#gh! -S localhost,31043 (menukar NodePort dari kubectl get svc/db), dan saya mendapatkan kesalahan:

Sambungan berhasil dibuat dengan server, tetapi kemudian terjadi kesalahan selama jabat tangan pra-masuk. (penyedia: Penyedia TCP, kesalahan: 0 - Koneksi yang ada ditutup secara paksa oleh host jarak jauh.)

Saya mendapatkan kesalahan yang sama dari Azure Data Studio dan SSMS.

Jika saya kubectl exec ... ke dalam wadah dan menjalankan /opt/mssql-tools/bin/sqlcmd -U sa -P C@mpl3xEn0#gh! -S localhost,1433 itu terhubung dengan baik.

Di mana kesalahan dalam file k8s.yaml saya yang menyebabkan SQL Server tidak menerima koneksi saat dijalankan di Kubernetes?

Saya sudah mencoba menyetel encrypt=false;trustServerCertificate=true; dan hasilnya tidak berubah.

3
robrich 19 November 2020, 20:37

1 menjawab

Jawaban Terbaik

Typo membuatku lagi. Inilah bagian yaml yang hilang:

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

Saya lupa bagian labels:. Jadi layanan dengan hati-hati meneruskan lalu lintas ke nol, yang tidak melakukan jabat tangan TLS, dan menghasilkan saya kesalahan yang salah.

0
robrich 20 November 2020, 22:22