2017-09-11 8 views
0

Kubernetesの3つのホスト(node-A、node-B、node-C)でとして動作するロードバランサ(LB)を使用しています。 LBはポート80で動作しているGitLabサービスで使用されています.GitLabはノードCで動作しており、ノードBのパブリックIPを使用してアクセスできます。ノードBは、最初に、Replication Controllerを使用してロードバランサ(HAProxy)をセットアップします。ここKubernetes - HAでロードバランサを実行し、DNSを使用してアプリケーションにアクセスする

スニペット:
1)私は、他のノードのパブリックIPを使用してGitLabにアクセスすることはできません。

[[email protected] service-loadbalancer]# cat rc.yaml 
apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: service-loadbalancer 
    labels: 
    app: service-loadbalancer 
    version: v1 
spec: 
    replicas: 3 
    selector: 
    app: service-loadbalancer 
    version: v1 

完全な詳細は、ここでhere

問題です。これは期待されていますか? LBが3つのノードすべてで実行されている場合、GitLabアプリケーションはポート80上の任意のノードのパブリックIPを使用してアクセスできないはずですか?

2)「single」DNS名を使用してLBにアクセスできるようにLBを構成したいとします(例:gitlab.test.com)。私はこれがどうやってできるのだろうと思っています。 DNSは何とかサービスにマッピングされますか(もしあれば、どのように)、サービスが管理するポッドにマッピングされますか?

Google Cloudをテスト用に使用していますが、実際のセットアップがVM上で社内で実行されるため、クラウドプロバイダー固有の方法を探しています。私の現在のHAProxy(またはHAProxyが実現できない場合はNGinx)を手に入れることができればベストだろう。

本当にありがとうございます。

+0

NodePortを使用してサービスを公開しましたか?通常、これはクラウドサービスが依存して提供されているので、サービスにLBを割り当て、自動的に負荷分散されます。そして、ノードIPではなくLBのIPを使用してアプリケーションにアクセスします。 –

+0

いいえ。私はGitLabサービスを公開するためにLoadBalancerを使用しています。詳細は[こちら](https://pastebin.com/DvMqSUh9)を参照してください。私の場合は、Google Cloudでテストしていますが、クラウドプロバイダは使用できません。社内で稼働しているVMでは実装できない方法は使用していません。 – Technext

答えて

0

問題は、gitlabインスタンスに到達するためにハプロキシクラスタを使用していないが、gitlabに直接アクセスしているという問題です。

あなたのhaproxyが正しく設定されていると仮定して、gitlabの場合とまったく同じようにLoad balancerタイプのサービスを使って公開する必要があります。 gitlabサービスをNodePortにする必要があります。ロードバランサを使ってインターネットに公開する必要がないからです(haproxyが公開され、リクエストをプロキシする)。最後に、ノード・アドレスではなく、インスタンスに到達するためにロード・バランサのIPアドレスを使用する必要があることに注意してください。 IPを取得するには、単にkubectl get svcを実行します。

脇役として、クラスタのすべてのノードで1つのhaproxyインスタンスを実行したいと思うので、この正確な範囲を対象としたReplicationControllerの代わりにDaemonSetを使用することができます。

+0

daemonsetのことをありがとう。 NodePortを使用するようにGitLabサービスを設定しましたが、GitLabサービスにリッスンできるように、LBのdaemonset _port_をどのように設定するのかよく分かりません。私は詳細な設定[ここ](https://pastebin.com/hiSK34CU)を持っています。私はLB用のサービスをまだ作成していませんが、その前に少なくともデーモンセットが正しく設定されていることを確認したかったのです。 – Technext

+0

'spec'セクションでは、haproxyコンテナの中に、" containerPort "値の配列を持つ" ports "キーを追加するだけです:" - containerPort:80 " – whites11

+0

Ok。これはすでに私が共有している[リンク](https://pastebin.com/hiSK34CU)にありますが、これからLBはどんな要求でも80を聞いてくれることを理解しています。 LBはGitLabサービスにリクエストを転送する必要があることをどのようにして知っていますか?GitLabはnodePort 30080でリッスンしています。これが私を混乱させます。私はdaemonset configに 'hostPort:30080'も持っています。それはそれがどのように分かるだろうか? – Technext

関連する問題