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

时间:2017-07-27 13:01:47

标签: 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资源。

秘密(对于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

外部服务(也尝试使用无头服务,但我也需要从外部连接外部服务)

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:1433的公共IP地址作为服务器名称时,出现以下错误。

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)

我错过了什么?

1 个答案:

答案 0 :(得分:0)

服务需要更改为loadBalancerIP: WW.XX.YY.ZZ。如果您已在与k8s群集相同的资源组中配置了静态IP,则可以将其指定为kubectl describe service sqlservice。如果注释,服务将提供新的IP地址。使用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 查找IP地址或使用k8s仪表板。

SELECT UNIX_TIMESTAMP();)