2016-11-14 6 views
1

自動スケーリングノードを使用してAWSでKubernetes v1.4クラスタを実行しています。 > 1.1.1.1 KubernetesローカルDNSに特定のAレコードを登録します

  • node2.mongo -

    • node1.mongo.example.com: は、私はまた、SSL接続のみ(FQDN共通名)とパブリックDNSエントリを持つMongoのレプリカセットのクラスタを持っています。 example.com - > 1.1.1.2
    • node3.mongo.example.com - > 1.1.1.3

    KubernetesノードはMongoのクラスタへのアクセスを許可するセキュリティグループの一部であるが、唯一のそれらを介してプライベートIP。

    パブリックFQDNが照会されたときに、Kubernetes DNSにプライベートIPを持つAレコードを作成する方法はありますか?

    私が試した最初のものは、起動時(REF。Is it a way to add arbitrary record to kube-dns?)に& ConfigMap組み合わせ更新するために、/ etc/hostsのスクリプトだったが、他のKubernetesサービスもホストが異なる時間にファイルを更新することとして、それは問題です。

    私もサービス& Enpointsの設定を試してみました:

    --- 
    apiVersion: v1 
    kind: Service 
    metadata: 
        name: node1.mongo.example.com 
    spec: 
        ports: 
        - protocol: TCP 
         port: 27017 
         targetPort: 27017 
    --- 
    apiVersion: v1 
    kind: Endpoints 
    metadata: 
        name: node1.mongo.example.com 
    subsets: 
        - addresses: 
         - ip: 192.168.0.1 
        ports: 
         - port: 27017 
    

    しかし、サービス名はFQDNすることはできませんので、これは失敗した...

  • +0

    mongoインスタンスAWSパブリックDNS(パブリックホスト名)を使用したことはありますか? ec2インスタンスから呼び出されるとプライベートIPにリダイレクトされます:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-ip-addressing.html#vpc-public-ip-addresses –

    答えて

    5

    をそれほど明らかでないが、最初に、解決策は非常に簡単です。最近のバージョンのkube-dnsイメージには、そのコンポーネントの1つとしてdnsmasqが含まれています。そのマニュアルページを見ると、便利なオプションがいくつか表示されます。 ConfigMapは、あなたが今、あなたが使用kube-dns-vXX展開にいくつかの変更を加えることができ、クラスタ内適用することを持って

    apiVersion: v1 
    kind: ConfigMap 
    metadata: 
        name: kube-dns 
        namespace: kube-system 
    data: 
        myhosts: | 
        10.0.0.1 foo.bar.baz 
    

    があなたのDNSマッピングを格納するためのConfigMapを作成します:あなたはこのようなパスを選択することを講義することができ、次のあなたのkubernetesで。

    dnsmasq

    volumes: 
        - name: hosts 
        configMap: 
         name: kube-dns 
    

    にあなたのCMを公開してマウントしますボリュームがkube-dns展開/ rcのテンプレート

    volumeMounts: 
        - name: hosts 
         mountPath: /etc/hosts.d 
    

    そして最後に、あなたに小さな設定フラグを追加あなたのdnsmasq容器の中にある定義しますdnsmasq引数:

    args: 
        - --hostsdir=/etc/hosts.d 
    

    この変更をクラスタのkube-dns-vXXデプロイメントに適用すると、configmapがマウントされ、dnsmasqの知識のソースとして/etc/hosts.d/(通常のホストファイル形式)にマウントされたファイルが使用されます。したがって、あなたのポッドでfoo.bar.bazを問い合わせると、それぞれのIPに解決されます。これらのエントリはパブリックDNSよりも優先されるので、あなたのケースに完全に合致するはずです。

    dnsmasqはConfigMapの変更を監視していないため、変更された場合は手動で再起動する必要があります。

    わずか数分前にライブクラスタでこれをテストし、検証しました。

    関連する問題