sql-server - 无法从 Management Studio 连接到 Azure 上的 Kubernetes (ACS) 上的 SQL Server 容器

标签 sql-server azure kubernetes azure-container-service

我创建了一个自定义 SQL Server 数据库容器镜像。我可以将其作为容器在本地计算机上运行(Windows 10 和 Docker for Windows)。运行该容器后,我可以使用服务器名称 127.0.0.1:1433 从 SQL Server Management Studio 成功连接到它。

我正在尝试在 Azure 中运行与 Kubernetes 中的 StatefulSet 相同的容器。

以下是 Kubernetes 资源。

secret (SQL Server SA 密码)

apiVersion: v1
kind: Secret
metadata:
  name: sqlsecret
type: Opaque
data:
  sapassword: base64encodedvalue

存储类(StatefulSet - 外部存储)

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azurestorageclass
provisioner: kubernetes.io/azure-disk
parameters:
  skuName: Standard_LRS
  location: southeastasia
  storageAccount: myaccount

外部服务(也尝试过 Headless Service,但我还需要从 Pod 进行外部连接)

apiVersion: v1
kind: Service
metadata:
  name: sqlservice
  labels:
    name: sqlservice
spec:
  ports:
  - port: 1433
    targetPort: 1433
  externalIPs: 
    - Kubernetes-Cluster-LB-Public-IP-Address-From-Azure-Portal
  selector:
    role: sqlservice

最后是 StatefulSet。

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: sqlserverstatefulset
spec:
  serviceName: "sqlservice"
  replicas: 1
  template:
    metadata:
      labels:
        role: sqlservice
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: sqlinux
          image: custom-image-from-docker-hub
          env:
            - name: SA_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: sqlsecret
                  key: sapassword
            - name: ACCEPT_EULA
              value: "Y"
          ports:
            - containerPort: 1433
          volumeMounts:
            - name: sql-persistent-storage
              mountPath: /data/db
  volumeClaimTemplates:
  - metadata:
      name: sql-persistent-storage
      annotations:
        volume.beta.kubernetes.io/storage-class: "azurestorageclass"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 100Gi

我运行此命令从本地计算机配置这些资源(上下文指向 Azure 集群)。

kubectl create -f c:\sqlkube.yaml

我的所有资源均已成功配置。 Kubernetes 仪表板中全是绿色,没有任何红色(kubctl proxy)。

我还为端口 1433 的 Azure 负载均衡器设置了运行状况探测和负载均衡规则。

但是,当我在 SQL Server Management Studio 中输入 LB 的公共(public) IP 地址:1433 作为服务器名称时,出现以下错误。

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - The wait operation timed out.) (Microsoft SQL Server, Error: 258)

我错过了什么?

最佳答案

服务需要更改为类型:LoadBalancer。如果您已经在与 k8s 集群相同的资源组中配置了静态 IP,则可以将其指定为 loadBalancerIP: WW.XX.YY.ZZ。如果评论,服务将提供一个新的 IP 地址。使用kubectl描述服务sqlservice来查找IP地址或使用k8s仪表板。

apiVersion: v1
kind: Service
metadata:
  name: sqlservice
  labels:
    app: sqlservice
spec:
  type: LoadBalancer
  #loadBalancerIP: 52.187.173.125
  ports:
  - port: 1433
    targetPort: 1433
  selector:
    app: sqlinux

关于sql-server - 无法从 Management Studio 连接到 Azure 上的 Kubernetes (ACS) 上的 SQL Server 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351616/

相关文章:

azure - 如何在 kubernetes 中使用 windows 容器挂载卷?

kubernetes - k6: k6 --out json - 打开 ./test.json: 权限被拒绝

sql - 可以包含空子集的多个外连接

sql-server - 有没有办法从 sqlcmd 获取当前正在执行的文件?

silverlight - 在 Silverlight 中检索响应 header ?

c# - ASP.NET CORE Web 应用程序抛出 SQLiteException : unable to open database file

通过 Airflow 创建的 Kubernetes pod 保持运行状态

sql - 按顺序和状态从表分区中选择

sql-server - Xquery 需要单例 :the column name is an attribute

azure - Azure Blob 存储生命周期计算时间还是仅计算日期?