Contents
以前、以下のSSH多段接続方法について書きましたがWindowsも踏み台の先にある場合がある環境もあると思います。
そこで、ここでは haproxy
を使ったルーティング方法について書いてみます。
環境
項目 | バージョン | 備考 |
---|---|---|
Ansible Tower | 3.5.1 | |
RHEL | 7.6 | |
haproxy | 1.5.18 | |
CentOS | 7.6 | haproxyホスト |
Windows | 2016 |
検証環境
このような環境を作りました。
Ansible Toewrはhaproxyの5986ポートへアクセスしてhaproxyはホスト名でアクセス先を振り分けます。
前提
既にWindows側にはWinRMの証明書が埋め込まれておりHTTPS接続が有効化されているものとします。
準備
haproxy
インストール
haproxyをインストールします。
1 2 |
# yum -y install haproxy |
設定変更
haproxyの設定を変更します。
1 2 3 |
[root@haproxy01 ~]# cd /etc/haproxy/ [root@haproxy01 haproxy]# vi haproxy.cfg |
ここでは、以下の設定をしました。
host
ヘッダーで接続先対象のルーティングを定義しています。
後、server.pem
は証明書と秘密鍵が一つのファイルにまとめたものになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon tune.ssl.default-dh-param 1024 stats socket /var/lib/haproxy/stats defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend main bind *:5986 ssl crt /etc/pki/tls/certs/server.pem option http-keep-alive acl target01 hdr_dom(host) -i target01 acl target02 hdr_dom(host) -i target02 use_backend target01 if target01 use_backend target02 if target02 backend target01 balance roundrobin option http-keep-alive server target01 10.32.254.2:5986 check check-ssl ssl verify none backend target02 balance roundrobin option http-keep-alive server target02 10.32.254.3:5986 check check-ssl ssl verify none |
haproxy起動
haproxyを起動します。
1 2 3 |
# systemctl start haproxy # systemctl status haproxy |
Windows
Basic認証の有効化
Windows側では basic認証
を有効化します。
Powershellを起動して以下のコマンドを実行します。
1 2 3 4 5 6 7 8 9 |
> winrm set winrm/config/service/auth '@{Basic="true"}' Auth Basic = true Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardentingLevel = Relaxed |
Baisc
が true
になっていることを確認します。
1 2 3 4 5 6 |
> winrm get winrm/config/service (snip) Auth Basic = true (snip) |
Ansible Tower
hosts設定
Ansible Tower側で名前解決が出来る必要があるため、ここでは /etc/hosts
に追記します。
1 2 3 4 5 |
# vi /etc/hosts (snip) 192.168.0.78 target01 192.168.0.78 target02 |
インベントリー
インベントリーは以下のように設定しました。
1 2 3 4 5 6 |
--- ansible_connection: winrm ansible_winrm_transport: basic ansible_port: 5986 ansible_winrm_server_cert_validation: ignore |
Playbook
Playbookは以下で作成したものを流用します。(ホスト名を表示するだけのもの)
テンプレート
実行
実行してみます。
それぞれのホストへアクセスして情報を取得しホスト名の表示ができることが確認できました 🙂
最後に
どうしても間に踏み台を入れた運用をする場合は、このようなやり方も検討するといいかもしれません 🙂
今回は手作業で作りましたが、haproxyのコンフィグも自動生成するような運用にすると運用・管理も負荷軽減になることが期待できますね。
それでは、みんなでハッピーオートメーション!