Pengaturan haproxy dengan pengaturan subdomain

8

Berharap seseorang dapat membantu mengonfirmasi jika ini berhasil? Saya mencoba untuk merutekan 3 lalu lintas subdomain ke host haproxy yang sama;

Ini pengaturan saya

haproxy dengan satu antarmuka ip 10.10.10.100 dan nama dns haproxy01.mydomain.com

3 catatan CNAME yang terkait dengannya; sub1.mydomain.com, sub2.mydomain.com dan sub3.mydomain.com

semua lalu lintas masuk adalah untuk port 443.

Ada dua server aplikasi back end yang menerima lalu lintas di tiga port 8081, 8082, 8083, katakanlah;

sub1.mydomain.com untuk 8081 sub2.mydomain.com untuk 8082 dan sub3.mydomain.com untuk 8083

Aplikasi ini memerlukan melewati SSL untuk hanya port 8081 lalu lintas jadi saya percaya saya harus menggunakan mode tcp untuk itu lalu lintas lain untuk 8082 dan 8083 juga SSL tetapi dapat diakhiri di Haproxy tetapi untuk pengujian saya pergi dengan semua TCP mode.

Bagian konfigurasi saya untuk mencapai ini di bawah;

    #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

Ketika saya mencoba mengakses server aplikasi melalui HAproxy misalnya untuk lalu lintas 8082 itu melempar ini adalah log;

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/0

menghargai beberapa arahan terkait pengaturan ini.

PS Saya tidak bisa menyematkan gambar untuk kejelasan di sini karena ini adalah posting pertama saya :-(

Pembelajaran Global
sumber
pesan log tidak lengkap; 20 Maret 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
Pembelajaran Global
NOSRV berarti tidak dapat menemukan backend yang cocok. Bisakah Anda mengakses halaman statistik atau soket dan melihat apa yang menurut backpro HAproxy sudah habis?
Jim G.
Periksa juga apakah ada konektivitas antara haproxy dan server aplikasi. Jika menggunakan nc: nc -v 10.10.10.101 8081, nc -v 10.10.10.102 8081, dll.
hdanniel
Pemeriksaan terakhir pada dasbor pemantauan haproxy melaporkan semua node. Saya juga sudah mengkonfirmasi konektivitas dari konsol Haproxy ke server aplikasi ini di semua port.
Global Learning
@ HD ya konektivitas baik-baik saja di kedua node.
Global Learning

Jawaban:

11

Dengan mode TCP, HAProxy tidak akan men-decode permintaan HTTP, jadi aclbaris Anda tidak akan melakukan apa pun dan frontend tidak akan pernah bisa mencocokkan backend, seperti yang ditunjukkan oleh log yang Anda masukkan: mytraffic/<NOSRV>berarti ia tidak dapat memilih backend atau server.

Anda harus membagi 3 subdomain menjadi 2 frontend yang berbeda, masing-masing dengan IP mereka sendiri karena semuanya terhubung pada port 443. Satu untuk passthrough, yang lain untuk terminasi SSL dan menggunakan alih konten mode http. Peringatan di sini adalah bahwa jika Anda menambahkan subdomain ke-4 (sub4.mydomain.com) yang juga memerlukan passthrough, Anda akan memerlukan frontend ke-3 dan IP.

Anda juga perlu membuat catatan CNAME atau A yang berbeda di DNS sehingga subdomain yang tepat menunjuk ke IP yang tepat.

Dengan konfigurasi DNS ini:

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

Konfigurasi HAproxy akan terlihat seperti ini:

#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
GregL
sumber
Sebenarnya, IP yang saya miliki di sini tidak masuk akal (saya menggunakan 10.10.10.101-102 untuk front-end di mana Anda mendapatkan mereka ditugaskan ke node), tetapi Anda mendapatkan ide bagaimana tampilannya.
GregL
@GREL - TERIMA KASIH. Saya akan mencoba ini dan dilingkari dengan hasil. Saya khawatir tentang mode tcp dan penggunaan acl sebelum menggunakannya.
Global Learning
Terima kasih GregL. berhasil. Satu pertanyaan terakhir kalau boleh? untuk memiliki SSL dari klien -> haproxy dan ke haproxy -> server backend (seperti itu dapat mengakhiri tetapi mulai yang baru ke backend), apa cara yang disarankan untuk melakukannya? ssl lulus dengan mode tcp? Alasan saya ingin passthrough untuk lalu lintas port 8081 adalah karena persyaratan untuk memiliki sesi yang saling dikonfirmasi dengan aplikasi dan klien. Sisa dari lalu lintas port 8082 dan 8083 memerlukan ssl tetapi tidak memerlukan otentikasi bersama. (Sekarang saya pergi dengan pendekatan passthrough).
Global Learning
Nah, HAProxy dapat melakukan pengecekan sertifikat klien dengan menggunakan opsi ca-filedan pernyataan tersebut. Jika Anda melakukannya, Anda bisa memiliki satu frontend terikat ke satu IP, dan kemudian konten beralih ke backend yang sesuai seperti yang dipersyaratkan oleh header host . Untuk mengonfirmasi bahwa otentikasi mutual berfungsi, Anda dapat membuat acl like , lalu menambahkannya sebagai syarat lain pada pernyataan sepertiverify optionalbindacl ClientSSLValid ssl_c_verify 0use_backenduse_backend sub1_nodes if host_sub1 ClientSSLValid
GregL
Ada artikel yang layak di sini dan di sini tentang cara melakukan ini, dengan lebih detail daripada yang saya berikan.
GregL