2017-01-31 7 views
2

外部StatefulSetsとKubernetesにMongoDBのを公開私は、次のリンクにガイド続い: http://blog.kubernetes.io/2017/01/running-mongodb-on-kubernetes-with-statefulsets.htmlクラスタ

およびStatefulSetsとKubernetesで設定MongoのDBの複製を設定します。これまでのところ良いですが、静的なホスト名をクラスタの外部に公開して、たとえばGoogleのインスタンスからアクセスできるようにするにはどうすればよいですか?私は、ノードのIPアドレスを使用している場合

それが正常に動作しますが、それらはいつでも変更することができます(ポッドの故障時やなど異なるIPを再起動します。)...事前に

ありがとう!

答えて

0

サービス(svc)を公開する必要があります。あなたが言ったように、異なるIPを持っていると定義されたポッド。 https://kubernetes.io/docs/user-guide/petset/で述べた例では

、あなたはサービス定義に気づくでしょう。

foo.default.svc.cluster.local 
     |service| 
     /  \ 
| pod-asdf | | pod-zxcv | 

これは、あなたが一度DNSに縛らサービスはあなたに安定したルックを与えるだろうon.The集中するために必要なものです。 ところで、ステートフルセットは以前のペットセットの成熟です。

+3

これは実際には役に立ちません。問題は「サービスを公開するにはどうすればよいのですか」です。答えは「サービスを公開する必要があります」です。リンクした画像は、「PetSetとは何ですか?」というセクションからのものです。それもあまり言わない。 – Adam

3

答えはStatefulSet基本ドキュメントのセクションUsing Stable Network Identitiesに存在しているように見えます:

ポッド序、ホスト名、SRVレコード、およびレコード名が変更さ ていませんが、関連付けられたIPアドレスポッドの が変更されている可能性があります。このチュートリアルで使用したクラスタには、これらがあります。このため、 StatefulSetのIPアドレスで ポッドに接続するように他のアプリケーションを設定しないことが重要です。

あなたが見つけると StatefulSetのアクティブなメンバーに接続する必要がある場合は、ヘッドレスサービス (nginx.default.svc.cluster.local)のCNAMEを照会する必要があります。 CNAMEに関連付けられたSRVレコードには、ステートフルセット内の とReadyを実行中のポッドのみが含まれます。

アプリケーションはすでに ライブネスと準備のためのテスト接続ロジックを実装している場合、彼らは安定しており、あなたの アプリケーションがポッドを発見することができるようになりますように、あなたはポッド(web-> 0.nginx.default.svc.cluster.local, web-1.nginx.default.svc.cluster.local)、 のSRVレコードを使用することができます がRunningとReadyに移行したときのアドレス。

0

私は強くあなたは何が起こっているかを熟知していることを確認するために、サービスのドキュメントで一目を取ることをお勧め:

https://kubernetes.io/docs/concepts/services-networking/service/

A Kubernetesサービスは、論理を定義する抽象概念でありますポッドのセットとそれらにアクセスするためのポリシー - マイクロサービスと呼ばれることもあります。「なし」:心とあなたが使用しているガイドのそれと

、次の点に注意してくださいCLUSTERIPに設定されているため、それ以外は

あなたはこのことを伝えることができますが、ヘッドレスサービスです、通常のKubernetesサービスとまったく同じように見えます。

だから、あなたが作成したことは、ヘッドレスサービス(無負荷バランサまたは露出したIPS)だから、

代わりにヘッドレスサービスのために与えられた構成のです:

apiVersion: v1 
    kind: Service 
    metadata: 
     name: mongo 
     labels: 
     name: mongo 
    spec: 
     ports: 
     - port: 27017 
     targetPort: 27017 
     clusterIP: None 
     selector: 
     role: mongo 

何実際に欲しいものは:

apiVersion: v1 
    kind: Service 
    metadata: 
     name: mongo 
     labels: 
     name: mongo 
    spec: 
     ports: 
     - protocol: TCP 
     port: 27017 
     targetPort: 27017 
     selector: 
     role: mongo 

非常に微妙ですが、 t clusterIPプロパティは存在しません。

TCPがデフォルトであっても、完全性のためにプロトコルを指定することをお勧めします。