2016-06-16 4 views
0

ローカルkubernetesインストール(1つのマスターと1つのノード、両方ともoracle linux)でmysqlサーバーインスタンスを公開しようとしていますが、ポッドにアクセスできない。ローカルインストール時にkubernetesポッドへのリモートアクセスを有効にする

ポッド構成はこれです:

apiVersion: v1 
kind: Pod 
metadata: 
    name: mysql 
    labels: 
    name: mysql 
spec: 
    containers: 
    - resources: 
     limits : 
      cpu: 1 
     image: docker.io/mariadb 
     name: mysql 
     env: 
     - name: MYSQL_ROOT_PASSWORD 
      value: 123456 
     ports: 
     - containerPort: 3306 
      name: mysql 

とサービスのファイル:

apiVersion: v1 
kind: Service 
metadata: 
    labels: 
    name: mysql 
    name: mysql 
spec: 
    type: NodePort 
    ports: 
    - port: 3306 
     targetPort: 3306 
     nodePort: 30306 
    selector: 
    name: mysql 

私はポッドが実行されていることがわかります。

# kubectl get pod mysql 
NAME  READY  STATUS RESTARTS AGE 
mysql  1/1  Running 0   3d 

そしてサービスですエンドポイントに接続:

# kubectl describe service mysql 
Name:   mysql 
Namespace:  default 
Labels:   name=mysql 
Selector:  name=mysql 
Type:   NodePort 
IP:   10.254.200.20 
Port:   <unset> 3306/TCP 
NodePort:  <unset> 30306/TCP 
Endpoints:  11.0.14.2:3306 
Session Affinity: None 
No events. 

kube-proxyがすべての着信接続に対してポート30306でリッスンしていることがnetstatでわかります。

tcp6  6  0 :::30306    :::*     LISTEN  53039/kube-proxy 

しかし、どういうわけか私はローカルホストでもmysqlからの応答を得られません。通常のMySQLのインストールのに対し

# telnet localhost 30306 
Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 

は、以下のようなもので応答:

$ telnet [REDACTED] 3306 
Trying [REDACTED]... 
Connected to [REDACTED]. 
Escape character is '^]'. 
N 
[REDACTED]-log�gw&TS(gS�X]G/Q,(#uIJwmysql_native_password^] 

最後の行でmysqlの部分に注目してください。最後のノートで

このkubectlの出力がある:

$ kubectl get service 
NAME   CLUSTER-IP  EXTERNAL-IP PORT(S) AGE 
kubernetes 10.254.0.1  <none>  443/TCP 9d 
mysql  10.254.200.20 nodes   3306/TCP 1h 

しかし、私は、「ノードが」EXTERNAL-IPの欄に何を意味するか理解していません。

私は、マスターIP(好ましくは)を介してmysqlサービスへのアクセスを開くことを望んでいます。どうしたらいいですか、私は何が間違っていますか?

答えて

1

その手下に透過的にルートのすべての接続を。

- >これを行うには、残念ながらデフォルトのKubernetesビルディングブロックではないロードバランサが必要です。

nginxポッドやホストにポートをバインドするhostPort: <port>を使用するサービスなど、ミニオンにトラフィックを送信するリバースプロキシを設定する必要があります。つまり、ポッドはそのノード上にとどまる必要があり、そのためにはノード名をセレクタとして使用するDaemonSetを使用します。

明らかに、これはフォールトトレラントではないため、複数のリバースプロキシを設定し、DNSラウンドロビン解決を使用してトラフィックをプロキシポッドの1つに転送できます。

どこかで、インターネット経由でサービスと話すために固定IPが必要な場合があります。そのため、静的ポッドがあることを保証する必要があります。

1

ノードポートは、クラスタ内の各ノードでkube-proxyサービスを介して公開されています。接続するために、そのホストのIP(Node01)を使用し、接続するには:私はまだ、クライアントが単一のサーバーに接続してくださいするかどうかはわかりません

telnet [IpOfNode] 30306

+0

何らかの理由でファイアウォールがkubernetes-proxyを妨害していたため、私はポート上でtelnet経由で接続できましたが、サーバからの応答はありませんでした。私は依然として、クライアントを単一のサーバーに接続させる方法をまだ分かりません。これは、すべての接続をミニオンに透過的にルーティングします。 –

関連する問題