注釈
この記事はAdvent Calenderの企画で書いているものなのですが、
残念ながらInstanaのUIはほとんど出てこないため、後ほど追記を行います。
モチベーション
1.Openshiftの機能を使うデモを作成するにあたり、OCPをいちいち作成するのは面倒で、Openshift Localを使って常にささっとOCPに接続する環境が欲しい。
2.Openshiftlocalを使うと自分のマシンが熱くなる、重くなるから常時起動するのは面倒
3.Openshift localは内部的には仮想マシンを起動して内部でOpenshift Console用のコンテナ起動してるはずだから外部接続すればいいんじゃね・・・?
4.ついでにOpenshift localを複数動かして、InstanaやTurbonomicで複数のClusterを監視しているっぽいいい感じの環境をサクサク作りたい。
Openshift localを実行しているLinux仮想マシンのtop 実行結果
top - 00:45:19 up 2 days, 13:07, 4 users, load average: 0.95, 1.62, 1.68
Tasks: 352 total, 1 running, 351 sleeping, 0 stopped, 0 zombie
%Cpu(s): 19.0 us, 9.8 sy, 0.0 ni, 69.5 id, 0.2 wa, 1.3 hi, 0.2 si, 0.0 st
MiB Mem : 15733.4 total, 198.6 free, 11975.1 used, 14612.1 buff/cache
MiB Swap: 8060.0 total, 7597.3 free, 462.7 used. 3758.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14434 qemu 20 0 14.1g 10.6g 10.5g S 118.3 69.0 44:09.22 qemu-kvm
ばっちりkvm(qemuプロセス)動いてるじゃんか。ということは外から接続可能ですよね。
大まかな手順
以下の公式ドキュメントが外部接続の大きな手がかりとなります。
このあとにInstanaから登録を行えばささっとInstanaから、
Openshift環境をいくつも監視しているデモ環境をデプロイできるはず。
https://docs.redhat.com/ja/documentation/red_hat_openshift_local/2.25/html/getting_started_guide/connecting_to_a_remote_redhat_openshift_local_instance
を参照しながらやればいいのですが、いくつか手順が抜けているので
この記事で補足しながら実際に行ってみます。
手順
1.linux VMにOpenshift localをインストールする
1.Openshift localを実行しているVMのIPアドレスを把握する
2.Openshift localの名前解決をリモートマシンからできるようにする
3.リモートマシンからVMのIPアドレスに接続ができるようにする
linux VMにOpenshift localをインストールする
まずredhat社のサイトからイメージを落としてきます。
[admin@localhost ~]$ wget https://developers.redhat.com/content-gateway/rest/mirror/pub/openshift-v4/clients/crc/latest/crc-linux-amd64.tar.xz
URLは適宜バージョンにより変化しますので、必ず確認の上実行してください。
手順書に沿って黙々とインストール作業を行います。
[admin@localhost ~]$ tar xvf crc-linux-amd64.tar.xz
[admin@localhost ~]$ cp crc-linux-2.43.0-amd64/crc ~/bin/
[admin@localhost ~]$ echo $PATH
[admin@localhost ~]$ export PATH=$PATH:$HOME/bin
[admin@localhost ~]$ echo PATH
[admin@localhost ~]$ echo $PATH
[admin@localhost ~]$ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
[admin@localhost ~]$ crc start
ついでにこのタイミングで物理IPを調べておきます。
物理IPとはOpenshift localを実行している物理マシンのIPアドレスを指しています。
[admin@localhost ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:99:3b:1e brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 192.168.11.1/24 brd 192.168.11.255 scope global dynamic noprefixroute ens192
valid_lft 48878sec preferred_lft 48878sec
inet6 fe80::250:56ff:fe99:3b1e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:c3:b1:d3 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: crc: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:fd:be:d0 brd ff:ff:ff:ff:ff:ff
inet 192.168.130.1/24 brd 192.168.130.255 scope global crc
valid_lft forever preferred_lft forever
5: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master crc state UNKNOWN group default qlen 1000
link/ether fe:fd:fc:07:21:82 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fcfd:fcff:fe07:2182/64 scope link
valid_lft forever preferred_lft forever
ens192 に192.168.11.1がアサインされているのがわかります。
ここで注意なのですが、私の環境はこのlinuxマシン自体が仮想マシンで動いています。
本来は物理クライアントにインストールするOpenshift localですので、
便宜上Openshift localをインストールしているマシンのIPを物理マシンのIP、
Opsnhift localが作り出すCRC VMのIPを仮想マシンのIPアドレスをVMのIPと呼んでます。
実際は仮想マシンなのでちょっとおかしな呼び方ではありますが、
明確に区別をする必要があるのであえてこの呼び方で進めさせて下さい。
Openshift localを実行しているVMのIPアドレスを把握する
GUIベースの管理ソフトがあるのであればそこから確認もできますが、
実はクライアント仮想マシンにOpenshift localをインストールすると、
hostsに仮想マシンIPアドレスを書き込むという動作を行います。今回はそれを直接覗いてしまいます。
[admin@localhost ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# Added by CRC
192.168.130.11 api.crc.testing canary-openshift-ingress-canary.apps-crc.testing console-openshift-console.apps-crc.testing default-route-openshift-image-registry.apps-crc.testing downloads-openshift-console.apps-crc.testing oauth-openshift.apps-crc.testing
# End of CRC section
今回の場合192.168.130.11が仮想マシンのIPアドレスです。
これを上手くリモートマシンに接続できればよいのです。
Openshift localの名前解決をリモートマシンからできるようにする
DNSの名前解決ができれば何でも構いませんが、私は自宅にdnsmasqを動かしているVMがいるのでそれを使います。
(未確認ですが、リモートマシンのhostsに追記しても動作すると思います。)
[admin@dns-machine ~]# vi /etc/dnsmasq.conf
address=/.testing/192.168.11.1 #追記. 必ず物理マシンのIPアドレスにする
ここで注意なのですが、必ず名前解決先のIPアドレスを物理マシンのIPにしておきます。
リモートマシンからVMのIPアドレスに接続ができるようにする
前提条件として、リモートマシンから物理マシンへ IP reachableであることを前提に進めます。
まず仮想マシン内のネットワークに入り込み、なおかつ仮想マシン側から外側に出ていく設定を色々入れ込むのが面倒です。
なぜなら今回自動的に作成されるcrc vmの内部設定を全部把握できないためです。
crc vmにデフォルトゲートを設定するなどをしてもcrc cleanupなどでcrc vmが削除されてしまう可能性もあるため、今回は物理マシンにha proxyを入れて接続を行うことにします。
もしCRC VMのIPアドレスが192.168.130.11ではない場合はご自分のCRC VMのIPアドレスに読み替えて操作を行って下さい。
[admin@localhost ~]$ dnf -y install haproxy
[admin@localhost ~]$ vi /etc/haproxy.cfg
global
log /dev/log local0
defaults
log global
mode http
timeout connect 10s
timeout client 1m
timeout server 1m
frontend crc
bind *:80
option tcplog
mode tcp
default_backend crc
frontend crc_https
bind *:443
option tcplog
mode tcp
default_backend crc_https
backend crc
mode tcp
balance roundrobin
server app1 192.168.130.11:80 check
backend crc_https
mode tcp
balance roundrobin
option ssl-hello-chk
server app1 192.168.130.11:443 check
frontend crc_api
bind *:6443
option tcplog
mode tcp
default_backend crc_api
backend crc_api
mode tcp
balance roundrobin
option ssl-hello-chk
server app1 192.168.130.11:6443 check
ha proxyを起動します
[admin@localhost ~]$ systemctl start haproxy
これでリモートマシンから接続ができるようになっています。
Instanaへ接続をできるようにする。
以下の記事を参考にしながらAgentをインストール
以上でお手軽にk8sを監視している環境がデプロイできました。
多少登録作業などがもたつくことなどはありますが、
概ね成功するので皆様ぜひお試しを!!