2017-07-27 26 views
0

カスタムSQL Serverデータベースコンテナイメージを作成しました。ローカルマシン(Windows用Docker for Windows)のコンテナとして実行できます。そのコンテナを実行した後、サーバー名を127.0.0.1:1433としてSQL Server Management Studioから正常に接続できます。Management StudioからKubernetes on Azure(ACS)のSQL Serverコンテナに接続できません

私は、AzureのKubernetesでStatefulSetと同じコンテナを実行しようとしています。

以下はKubernetesのリソースです。

シークレット

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

ストレージクラス(StatefulSet - 外部ストレージ)(SQL ServerのSAパスワードの場合)

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 

最後にステートフルセット。

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をサーバー名としてSQL Server Management Studioで、私が手に:私はLBの公開IPアドレスを入力したとき

は、私はまた、1433

しかし健康プローブを設定し、ポートのためのAzureのロードバランサのためのバランスのルールをロードしています次のエラー。

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) 

何が欠けていますか?

答えて

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 
関連する問題