Невозможно подключиться к контейнеру SQL Server в Kubernetes в Azure (ACS) из Management Studio

Я создал собственный образ контейнера базы данных SQL Server. Я могу запустить это как контейнер на моем локальном компьютере (Windows 10 с Docker для Windows). После запуска этого контейнера я могу успешно подключиться к нему из SQL Server Management Studio, используя имя сервера 127.0.0.1:1433.

Я пытаюсь запустить тот же контейнер в качестве StatefulSet в Kubernetes в Azure.

Ниже приведены ресурсы 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

Внешняя служба (также пробовала использовать Headless Service, но мне также нужно подключаться извне из модулей)

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).

Я также установил проверку работоспособности и правило балансировки нагрузки для Azure Load Balancer для порта 1433.

Однако, когда я ввожу общедоступный IP-адрес LB: 1433 в качестве имени сервера в SQL Server Management Studio, я получаю следующую ошибку.

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)

Что мне не хватает?


person Mahesh    schedule 27.07.2017    source источник


Ответы (1)


Сервис необходимо изменить на type: LoadBalancer. Если вы уже предоставили статический IP-адрес в той же группе ресурсов, что и кластер k8s, вы можете указать его как 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
person Mahesh    schedule 10.08.2017