首页 文章

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

提问于
浏览
0

我创建了一个自定义SQL Server数据库容器映像 . 我可以将其作为本地计算机上的容器运行(带有Docker for Windows的Windows 10) . 运行该容器后,我可以使用服务器名称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

外部服务(也用无头服务尝试,但我也需要从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: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

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

相关问题