2016-11-21 18 views
1

私はOpenshift Originのインストール(v.1.2.1、この問題を1.3.0で再現しました)、サービス名でDNSからポッドのIPを取得しようとしています。私のノードにIP 192.168.58.6があると仮定し、私はプロジェクト 'hz-test'でヘッドレスサービス 'hz'のポッドを探します。私は(ノードにインストールし、Kubernetes' SkyDNSに要求を転送している)UDP上でDNSMASQにDNS要求を送信しようとすると、すべてがうまくいく:DNSはポッドからTCPを介して動作しません

# dig +notcp +noall +answer hz.hz-test.svc.cluster.local @192.168.58.6 
hz.hz-test.svc.cluster.local. 14 IN A 10.1.2.5 
<and so on...> 

をしかし、私はTCPへのトランスポートプロトコルを切り替えたときに、私が受け取ります次のエラーが:

# dig +tcp +noall +answer hz.hz-test.svc.cluster.local @192.168.58.6 
;; communications error to 192.168.58.6#53: end of file 

tcpdumpの出力に見た後、私は、発見したそのTCPコネクションを確立した後(SYN - SYN/ACK - ACK)dnsmasqのは、すぐにFIN/ACKを送り返し、そして時にDNSクライアントの試行この接続を使用して要求を送信するには、dnsmasqはDNS応答の代わりにRSTパケットを送り返します。私は自分自身のノードからTCPを介して同じDNSクエリを実行しようとしましたが、dnsmasqは通常の応答を返しました。つまり、TCP上で正常に動作し、ポッドから要求を実行しようとしたときに問題が発生しました。また、私はポッドからKubernetesのDNS(dnsmasqを避けて)に直接同じクエリを送信しようとしましたが、このクエリもOKでした。

なぜノード上のdnsmasqがポッドからのTCP要求を無視し、他の通信に問題がないのでしょうか?それは行動と思われますか?

ご意見やご感想をお寄せください。

答えて

1

最後に、dnsmasqがノードのIP(listen-adress = 192.168.58.6)をリッスンするように設定されていたためです。このような構成では、dnsmasqはすべてのノードのネットワークインターフェイスにバインドしますが、ユーザー空間(つまり、それ自身)の「間違った」接続を拒否しようとします。

dnsmasqのは192.168.58.6へのポッドからの要求は、このような構成で禁じられていたことを決めた理由を私は本当に、理解していないが、私は強制

interface=eth0 
bind-interfaces 

に「リッスンアドレス」を変更することにより、作業それを得ましたIP 192.168.58.6のNICにのみバインドするdnsmasq。その後、dnsmasqはすべてのTCP要求を受け入れ始めました。

関連する問題