サブドメイン設定を使用したHaproxy設定


8

誰かがこれがうまくいくかどうか確認するのを手伝ってくれることを願っていますか?3つのサブドメイントラフィックを同じhaproxyホストにルーティングしようとしています。

これが私のセットアップです

1つのインターフェースip 10.10.10.100とdns名haproxy01.mydomain.comを持つhaproxy

それに関連付けられた3つのCNAMEレコード。sub1.mydomain.com、sub2.mydomain.comおよびsub3.mydomain.com

着信トラフィックはすべてポート443用です。

3つのポート8081、8082、8083でトラフィックを受け入れる2つのバックエンドアプリケーションサーバーがあるとします。

8081の場合はsub1.mydomain.com、8082の場合はsub2.mydomain.com、8083の場合はsub3.mydomain.com

アプリケーションはポート8081トラフィックに対してのみSSLパススルーを必要とするため、8082および8083の他のトラフィックもSSLであるtcpモードを使用する必要があると思いますが、Haproxyで終了できますが、テストではすべてのTCPを使用しましたモード。

これを実現するための私の構成セクションは以下のとおりです。

    #Application Setup 
frontend mytraffic
    bind *:443
    mode  tcp
    acl host_sub1 hdr(host) -i sub1.mydomain.com
    acl host_sub2 hdr(host) -i sub2.mydomain.com
    acl host_sub3 hdr(host) -i sub3.mydomain.com

    use_backend sub1_nodes if host_sub1
    use_backend sub2_nodes if host_sub2
    use_backend sub3_nodes if host_sub3

    option tcplog backend sub1_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8081 check
    server node2 10.10.10.102:8081 check 
backend sub2_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8082 check
    server node2 10.10.10.102:8082 check 
backend sub3_nodes
    mode tcp
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server node1 10.10.10.101:8083 check
    server node2 10.10.10.102:8083 check


    # APPLICATION SETUP END

たとえば8082トラフィックのHAproxyを介してアプリケーションサーバーにアクセスしようとすると、これはログです。

localhost haproxy [6097]:xxxx:51241 [20 / Mar / 2015:12:19:38.720] mytraffic mytraffic / -1 / -1 / 0 0 SC 0/0/0/0/0 0/0

このセットアップに関するいくつかの方向性に感謝します。

PSそれは私の最初の投稿なので、ここではわかりやすくするために画像を埋め込むことはできません:-(


ログメッセージは完全ではありませんでした。3月20日12:19:38 localhost haproxy [6097]:xxxx:51241 [20 / Mar / 2015:12:19:38.720] mytraffic mytraffic / <NOSRV> -1 / -1 / 0 0 SC 0/0/0 / 0/0 0/0
グローバルラーニング

NOSRVは、適切なバックエンドが見つからなかったことを意味します。統計ページまたはソケットにアクセスして、HAproxyが起動していると考えているバックエンドを確認できますか?
ジムG.

haproxyとアプリケーションサーバーの間に接続があるかどうかも確認してください。ncを使用している場合:nc -v 10.10.10.101 8081、nc -v 10.10.10.102 8081など
hdanniel

haproxyモニタリングダッシュボードの最後のチェックは、すべてのノードが稼働していることを報告しています。また、Haproxyコンソールからこれらのアプリケーションサーバーへの接続をすべてのポートで確認しました。
グローバルラーニング

@HDはい、接続は両方のノードで正常です。
グローバルラーニング

回答:


11

TCPモードでは、HAProxyはHTTPリクエストをデコードしないため、acl入力したログに示されているように、ラインは何もせず、フロントエンドはバックエンドと一致mytraffic/<NOSRV>することができません。つまり、選択できなかったことを意味します。バックエンドまたはサーバー。

3つのサブドメインを2つの異なるフロントエンドに分割する必要があります。これらはすべてポート443で接続しているため、それぞれ独自のIPを持っています。1つはパススルー用、もう1つはSSLターミネーションとを使用しmode httpたコンテンツスイッチング用です。ここでの警告は、パススルーも必要な4番目のサブドメイン(sub4.mydomain.com)を追加する場合、3番目のフロントエンドとIPが必要になることです。

また、正しいサブドメインが正しいIPを指すように、DNSに異なるCNAMEまたはAレコードを作成する必要があります。

このDNS構成を考えると:

10.10.10.100        A         haproxy01-cs.mydomain.com
10.10.10.101        A         haproxy01-pt1.mydomain.com
10.10.10.102        A         haproxy01-pt2.mydomain.com
sub1.mydomain.com   CNAME     haproxy01-pt1.mydomain.com
sub2.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub3.mydomain.com   CNAME     haproxy01-cs.mydomain.com
sub4.mydomain.com   CNAME     haproxy01-pt2.mydomain.com

HAproxy構成は次のようになります。

#Application Setup 
frontend ContentSwitching

  bind 10.10.10.100:443
  mode  http
  option httplog
  acl host_sub2 hdr(host) -i sub2.mydomain.com
  acl host_sub3 hdr(host) -i sub3.mydomain.com
  use_backend sub2_nodes if host_sub2
  use_backend sub3_nodes if host_sub3

frontend PassThrough1
  bind 10.10.10.101:443
  mode  tcp
  option tcplog
  use_backend sub1_nodes     

frontend PassThrough2
  bind 10.10.10.102:443
  mode  tcp
  option tcplog
  use_backend sub4_nodes

backend sub1_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8081 check
  server node2 10.10.10.102:8081 check 

backend sub2_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8082 check
  server node2 10.10.10.102:8082 check 

backend sub3_nodes
  mode http
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8083 check
  server node2 10.10.10.102:8083 check

backend sub4_nodes
  mode tcp
  balance roundrobin
  stick-table type ip size 200k expire 30m
  stick on src
  server node1 10.10.10.101:8084 check
  server node2 10.10.10.102:8084 check

実際、ここにあるIPは意味がありません(ノードに割り当てられているフロントエンドに10.10.10.101-102を使用しました)が、どのように見えるかはわかります。
GregL 2015年

@GreL-ありがとう。私はこれを試してみて、結果に囲まれます。使用する前に、tcpモードとaclの使用について心配していました。
グローバルラーニング

GregLに感謝します。できます。最後にもう1つ質問がありますか。クライアントからSSLを使用する-> haproxyおよびhaproxy->バックエンドサーバー(終了することはできますが、バックエンドに対して新しいサーバーを開始するような)の場合、推奨される方法は何ですか?sslはtcpモードでパススルーしますか?ポート8081トラフィックのパススルーが必要だったのは、アプリケーションとクライアントとの相互認証セッションが必要なためです。残りのポート8082および8083トラフィックにはsslが必要ですが、相互認証は必要ありません。(今、私はパススルーアプローチで行きました)。
グローバルラーニング

まあ、HAProxy はステートメントのca-fileand verify optionalオプションを使用してクライアント証明書のチェックを行うことができますbind。その場合、単一のフロントエンドを1つのIPにバインドし、ホストヘッダーの要求に応じてコンテンツを適切なバックエンドに切り替えることができます。相互認証は次のようにACLを作成することができます働いていることを確認するためにacl ClientSSLValid ssl_c_verify 0、その後に別の条件として追加し、use_backendのような文use_backend sub1_nodes if host_sub1 ClientSSLValid
GregL

まともな書き込みアップがありますここここで私が提供してきましたよりも詳細で、これを行う方法については。
GregL 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.