NTTテクノクロス Advent Calendar 2018の2日目担当 @niiku-y です。
突然ですが、皆様の会社では、コンテナのプラットフォームとして何を使っていますか?
本日の記事では、コンテナのデプロイや管理に使うソフトウェア Rancher の冗長構成でのインストールについて、書いてみようと思います。
動機
簡単にいうと、「やったことなかったのでやってみました」ということですね。
- 私の所属チームは、インフラの構築・運用を主な業務としており、その中で私は、OpenStack、コンテナに関する業務に関わっています。
- 例えば OSSクラウド基盤トータルサービス のうち「チケットサービス」によりお客様OpenStack環境でのトラブル対応をしたり、案件対応としてコンテナを使った環境の設計をお客様と一緒に検討したり、といったことをやっています。
- OpenStack Summit , OpenStack Days等の国内外イベントに出席し、技術動向や製品・事例を見に行ったり、自社サービスの宣伝をする、といったこともしています。
- Rancher については、上記のような業務の中で社内や顧客環境で使用するコンテナプラットフォームを検討する中で出会い、社内クラウドに Single Node Installで入れて試用したりしています。
- RancherのHA installは、気になりつつもまだ試していなかったので、今更ながら試してみました。
- あと、なんかrancherの独特の画面、好きなんですよね。あの牛も好きです
環境情報
1. 論理構成
作業に使った環境は以下のような構成です。
「なぜ、そんな構成になっているの?」というツッコミはあるかとは思いますが、使える環境やリソースが限られていたので、、、ご容赦ください。。
- ロードバランサとして構築するノードが1台(LBノード)、rancher-server用ノードが3台(master#1~3)。
- LBノードは、rancher-server用ノードとは別のノードにする。L4ロードバランサをrancher-server用ノードに同居させない。
- いずれもOpenStackで構築したVMで、LBノードにのみFloating IPを付与する。
- rancher-serverは、3台のHA構成で構築する。
- L4ロードバランサを構築し、ユーザからのリクエストが3台のrancher-server用ノードに振り分けられるようにする。
- この環境は踏み台サーバを経由しての作業となる。踏み台から直接アクセスできるのはLBノードのFloating IPアドレスのみ。
2. 各ノードのスペック
- 環境のリソースの都合上、各ノードはvCPUs 2、RAM 4GB、ディスク 20GBで作成。
- 手順を試すくらいであればこのスペックでも動く。が、本来は、Node Requirementsの「Hardware」で適切なスペックのものを準備すべき。
3. IPアドレス
ノード | IPアドレス | 備考 |
---|---|---|
lb01.openstacklocal | 172.16.24.150 | LBノードの踏み台サーバ側のIPアドレス |
lb01.openstacklocal | 192.168.0.108 | LBノードのrancher-server側のIPアドレス |
master01 | 192.168.0.109 | rancher-server用ノードの1台目(master#1) |
master02 | 192.168.0.110 | rancher-server用ノードの2台目(master#2) |
master03 | 192.168.0.111 | rancher-server用ノードの3台目(master#3) |
4. 使用したversion
LBノード、rancher-server用ノードで使っているOS, dockerのバージョンは全て同じ。
- OS : ubuntu 16.04.5
- docker : docker-ce 17.03.2
- kubernetes : v1.11.3
- rke : v0.1.11
- helm : v2.11.0
- rancher : v2.1.1
- chart : rancher-2018.10.2
- cert-manager : v0.5.0
- nginx : 1.14.1-1~xenial
サマリ
実施した作業は以下のとおり。
- requirementsに沿ってノード自体を作成し、LBノード、rancher-server用ノードでdockerを使えるようにする
- RKEによりrancher-server用ノードにkubernetesを入れる(kubectlも含む)
- Helmによりcert-managerとrancherを入れる
- LBノードでL4ロードバランサを構築し、Rancher画面が見れるか動作確認する
もう少し細かく書くと、各作業内容とその対象ノードは以下のようになります。
表中、○の付いているノードが作業対象です。(折りたたんであります)
各作業の対象ノード
項番 | 作業内容 | lb01 | master01 | master02 | master03 | 踏み台 |
---|---|---|---|---|---|---|
1 | node requirement確認 | ○ | ○ | ○ | ○ | - |
2 | 各ノード自体の用意 | - | - | - | - | - |
2.1 | VM自体の作成 | ○ | ○ | ○ | ○ | - |
2.2 | 踏み台からVMに入るための設定 | - | - | - | - | ○ |
2.3 | VMのパッケージ更新、名前解決の設定 | ○ | ○ | ○ | ○ | - |
2.4 | LBノードからVMへのsshアクセス設定 | ○ | ○ | ○ | ○ | - |
2.5 | docker-ceインストール | ○ | ○ | ○ | ○ | - |
2.6 | Post-installation stepsの実施 | ○ | ○ | ○ | ○ | - |
3 | RKEによるkubernetesインストール | - | - | - | - | - |
3.1 | rancherクラスタの設定ファイル作成 | ○ | - | - | - | - |
3.2 | RKEのインストール | ○ | - | - | - | - |
3.3 | RKEコマンド実行 | ○ | - | - | - | - |
3.4 | kube_config_rancher-cluster.yml配布 | ○ | ○ | ○ | ○ | - |
3.5 | kubectlインストールと動作確認 | - | ○ | ○ | ○ | - |
4 | Helmのインストール | - | - | - | - | - |
4.1 | Tillerサービスアカウントの設定 | - | ○ | - | - | - |
4.2 | kubectlによる状態確認 | - | ○ | - | - | - |
4.3 | Helmインストール | - | ○ | - | - | - |
5 | cert-managerとrancherのインストール | - | - | - | - | - |
5.1 | Helmリポジトリ追加 | - | ○ | - | - | - |
5.2 | cert-managerインストール | - | ○ | - | - | - |
5.3 | rancherインストール | - | ○ | - | - | - |
6 | LB構築 | - | - | - | - | - |
6.1 | nginxインストール | ○ | - | - | - | - |
6.2 | nginxの設定 | ○ | - | - | - | - |
7 | 動作確認 | - | - | - | - | - |
7.1 | 踏み台サーバからのsshポート転送 | - | - | - | - | ○ |
7.2 | 名前解決設定の確認 | ○ | - | - | - | ○ |
7.3 | クライアントからのrancher画面アクセス | - | - | - | - | - |
次のセクションで、実施した作業の手順を詳述します。
が、dockerインストール等々をいまさら見るのもかったるい方も多いと思いますので、
そんな方々は、最初のほうはすっ飛ばして、 RKEによるkubernetesインストール 以降をごらんください。
実施手順
上記サマリのとおり、基本的にHigh Availability (HA) Installに従って進めればOKです。
ですが、若干ハマった箇所もあったので、そこはどう対処したか記載しています。
私の作業ミスや、理解不足、勘違いの場合もあるかと思いますので、そうした点があった場合は、ご指摘ください。
詳細な記載が無かった部分は、ポインタとなる情報がちゃんとドキュメントに書いてあるので、適宜補いながら環境構築できました。
1. node requirementの確認
構築前に、必要なハードウェアリソース、使用できるOS, dockerなどの各バージョン、使用ポートをNode Requirements , RKE Requirements , NGINX で確認しておく。
2. 各ノード自体の用意
LBノード、rancher-server用ノード全台のVMを用意、初期設定する。
ここでは Create Nodes and Load Balancer に従い、各ノードを設定する。
※2.1~2.4は準備作業を実施するための準備みたいなところなので、適当に読み飛ばしていただければと思います。
2.1 VM自体の作成
-
公開されているUbuntuのイメージをもとに、LBノード、rancher-server用ノードのVMを作成する。
- VMにアクセスするためのキーペアも作成しておく。
2.2 踏み台からVMに入るための設定
- 踏み台サーバにLBノードへsshアクセスするための秘密鍵を配置する
- VM作成時に作ったキーペアのうち、秘密鍵のほう
- 踏み台サーバからLBノードにsshで入れることを確認しておく
2.3 VMのパッケージ更新、名前解決の設定
- LBノード、rancher-server用ノード全台で以下を実施
- 名前解決の設定(resolv.conf, hosts)
- パッケージ更新(apt-get update, apt-get upgrade)
ubuntu@lb01:~$ vi init_common.sh
ubuntu@lb01:~$ cat init_common.sh
#!/bin/bash
# init_common.sh
echo "backup resolv.conf, resolv.conf.d/base"
cp /etc/resolv.conf /etc/.resolv.conf.org
cp /etc/resolvconf/resolv.conf.d/base /etc/resolvconf/resolv.conf.d/.base.org
echo "nameserver 8.8.8.8" >> /etc/resolvconf/resolv.conf.d/base
resolvconf -u
echo ""
echo "/etc/resolv.conf (after) : "
cat /etc/resolv.conf
echo ""
echo "package update ..."
sudo apt-get update && sudo apt-get upgrade -y
cat <<EOF >> /etc/hosts
192.168.0.108 lb01.openstacklocal lb01
192.168.0.109 master01
192.168.0.110 master02
192.168.0.111 master03
EOF
echo ""
echo "/etc/hosts : "
cat /etc/hosts
echo ""
echo "finish."
ubuntu@lb01:~$ chmod +x init_common.sh
ubuntu@lb01:~$ sudo bash ./init_common.sh
2.4 LBノードからVMへのsshアクセス設定
- LBノードで鍵ペアの作成
後述するrkeコマンドの実行時に、VM作成時に生成したキーペアを使用した場合、
LBノードからrancher-server用ノードへのアクセスがうまくいかなかった。
※IPアドレスが現在の環境と異なるが、試したときのrkeのログを以下に残しておく。
WARN[0000] Failed to set up SSH tunneling for host [192.168.0.107]: Can't retrieve Docker Info: error during connect: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info: Failed to dial ssh using address [192.168.0.107:22]: Error configuring SSH: asn1: structure error: superfluous leading zeros in length
そのため、ここではLBノードからrancher-server用ノードへのアクセスのためのキーペアを作成し、適当な名前で保存しておく。公開鍵はauthorized_keysに登録しておく。
※ここで作成したキーペアを使った場合は、rkeコマンドが成功した
ubuntu@lb01:~$ ssh-keygen -t rsa -b 4096
ubuntu@lb01:~$ cd .ssh
ubuntu@lb01:~/.ssh$ mv id_rsa id_rsa.pri.lb01
ubuntu@lb01:~/.ssh$ mv id_rsa.pub id_rsa.pub.lb01
ubuntu@lb01:~/.ssh$ cat id_rsa.pub.lb01 >> authorized_keys
- LBノードでsshのconfig設定
LBノードからrancher-server用ノード全台へのsshログインをより簡単にするため.ssh/configを設定する。
ここではVM作成時の秘密鍵のファイルパスを~/.ssh/hoge.pemとしている。
ubuntu@lb01:~/.ssh$ cat config
Host lb01
Hostname lb01
User ubuntu
Port 22
IdentityFile ~/.ssh/hoge.pem
Host master01
Hostname master01
User ubuntu
Port 22
IdentityFile ~/.ssh/hoge.pem
Host master02
Hostname master02
User ubuntu
Port 22
IdentityFile ~/.ssh/hoge.pem
Host master03
Hostname master03
User ubuntu
Port 22
IdentityFile ~/.ssh/hoge.pem
ubuntu@lb01:~/.ssh$ chmod 600 config
ubuntu@lb01:~/.ssh$ ls -l
- authorized_keysとconfigの配布
LBノードからrancher-server用ノード全台に対して、上記authorized_keysとsshのconfigを配布する
ubuntu@lb01:~$ vi copy_keyconf.sh
ubuntu@lb01:~$ cat copy_keyconf.sh
#!/bin/bash
# copy_keyconf.sh
HOSTLIST="master01 master02 master03"
for h in $HOSTLIST
do
scp ~/.ssh/authorized_keys ubuntu@${h}:/home/ubuntu/.ssh/authorized_keys
scp ~/.ssh/config ubuntu@${h}:/home/ubuntu/.ssh/config
done
ubuntu@lb01:~$ chmod +x copy_keyconf.sh
ubuntu@lb01:~$ ./copy_keyconf.sh
- 動作確認
LBノードから秘密鍵を使ってrancher-server用ノード全台にsshログインできることを確認する。
ubuntu@lb01:~/.ssh$ ssh master01
ubuntu@lb01:~/.ssh$ ssh master02
ubuntu@lb01:~/.ssh$ ssh master03
2.5 docker-ceインストール
ubuntuへのdocker-ceインストール手順に従って、LBノード、rancher-server用ノード全台でdockerのインストールを実施する。
ubuntu@master01:~$ vi install_docker.sh
ubuntu@master01:~$ cat install_docker.sh
#!/bin/bash
#install_docker.sh
echo "dpkg -l docker : "
dpkg -l docker
sudo apt-get update
echo ""
echo "install apt-transport-https ca-certificates curl software-properties-common : "
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
echo ""
echo "apt-key add : "
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
## OKとなること
echo ""
echo "fingerprint : "
sudo apt-key fingerprint 0EBFCD88
## 以下であること
## Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
echo ""
echo "add repository : "
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable edge test"
sudo apt-get update
echo ""
echo "install docker-ce : "
#apt-cache madison docker-ce
sudo apt-get install -y docker-ce=17.03.2~ce-0~ubuntu-xenial
sudo docker run hello-world
sudo docker info
ubuntu@master01:~$ chmod +x install_docker.sh
ubuntu@master01:~$ ./install_docker.sh
2.6 Post-installation stepsの実施
引き続き、LBノード、rancher-server用ノード全台で、Post-installation steps for Linuxを実施する。
lsmodしたとき、RKEのOS Requirementsにあるkernel moduleが存在してない場合、 /etc/modulesに記載して起動時に組み込まれるようにしておく。
- dockerグループへのユーザ追加
- swap無効化
- カーネルモジュールの設定
- カーネルパラメータの設定
ubuntu@lb01:~$ vi postinst.sh
ubuntu@lb01:~$ cat postinst.sh
#!/bin/bash
# postinst.sh
usr="ubuntu"
echo "group check : "
if ! groups $usr | grep docker >/dev/null ; then
sudo usermod -aG docker $usr
echo "after : "
groups $usr
else
echo "nothing to do."
groups $usr
fi
## すでに無効化されているので現状表示のみ
echo ""
echo "swap check (fstab) :"
cat /etc/fstab
echo ""
echo "swap check (free) :"
free -h
echo ""
echo "kernel module (check) :"
lsmod
if [ ! -f check.sh ]; then
cat <<EOF >> check.sh
#!/bin/bash
# check.sh
modules="br_netfilter ip6_udp_tunnel ip_set ip_set_hash_ip ip_set_hash_net iptable_filter iptable_nat iptable_mangle iptable_raw nf_conntrack_netlink nf_conntrack nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat nf_nat_ipv4 nf_nat_masquerade_ipv4 nfnetlink udp_tunnel veth vxlan x_tables xt_addrtype xt_conntrack xt_comment xt_mark xt_multiport xt_nat xt_recent xt_set xt_statistic xt_tcpudp"
for m in \${modules}
do
if ! lsmod | grep \${m} >/dev/null ; then
echo "\${m}"
fi
done
EOF
chmod +x ./check.sh
else
echo "check.sh : already exists"
fi
./check.sh > list.txt
echo ""
echo "kernel module (modify) :"
if [ ! -f /etc/modules.org ]; then
cat /etc/modules list.txt >> modules.after
cp /etc/modules /etc/modules.org
cp modules.after /etc/modules
cat /etc/modules
else
echo "exist : /etc/modules.org"
echo "/etc/modules : already modified."
cat /etc/modules
fi
echo ""
echo "kernel parameter : "
if ! grep net.bridge.bridge-nf-call-iptables /etc/sysctl.conf >/dev/null ; then
cp /etc/sysctl.conf /etc/sysctl.conf.org
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
diff /etc/sysctl.conf /etc/sysctl.conf.org
grep net.bridge.bridge-nf-call-iptables /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
else
echo "exist : net.bridge.bridge-nf-call-iptables"
fi
echo ""
echo "confirm (sysctl) : "
sysctl net.bridge.bridge-nf-call-iptables
echo ""
echo "confirm (check.sh) : "
./check.sh
echo ""
echo "finish."
ubuntu@lb01:~$ chmod +x postinst.sh
ubuntu@lb01:~$ sudo bash postinst.sh
各ノードreboot後も設定が有効であることを確認しておく。
check.sh実行の結果は、なにも表示されないことが正しい。
表示されたものは/etc/modulesに追記して起動時に有効になるよう反映する。
ubuntu@lb01:~$ sysctl net.bridge.bridge-nf-call-iptables
ubuntu@lb01:~$ ./check.sh
3. RKEによるkubernetesインストール
ここでは Install Kubernetes with RKE の内容を実施する。
kubectlは入っていなかったので、「3.5 kubectlインストールと動作確認」にて入れる必要がある。
3.1 rancherクラスタの設定ファイル作成
のちほど、LBノードでrkeコマンドを実行してrancher-server用ノードにkubernetesを入れることになるが、そのときの入力となるファイルが、このrancher-cluster.ymlである。
LBノードからrancher-server用ノードへのsshログイン時に使う秘密鍵(id_rsa.pri.lb01)を、この設定ファイルにて指定する。
ここまでで各rancher-server用ノードには、authorized_keysとして対応する公開鍵(id_rsa.pub.lb01)の情報は配布済みである。
ubuntu@lb01:~$ vi rancher-cluster.yml
ubuntu@lb01:~$ cat rancher-cluster.yml
nodes:
- address: 192.168.0.109
user: ubuntu
ssh_key_path: /home/ubuntu/.ssh/id_rsa.pri.lb01
role: [controlplane,worker,etcd]
- address: 192.168.0.110
user: ubuntu
ssh_key_path: /home/ubuntu/.ssh/id_rsa.pri.lb01
role: [controlplane,worker,etcd]
- address: 192.168.0.111
user: ubuntu
ssh_key_path: /home/ubuntu/.ssh/id_rsa.pri.lb01
role: [controlplane,worker,etcd]
services:
etcd:
snapshot: true
ubuntu@lb01:~$
3.2 RKEのインストール
LBノードにて、githubからRKEをダウンロードしてきて、実行権あたえて好きな場所にmvなどで配置する。
ubuntu@lb01:~$ vi install_rke.sh
ubuntu@lb01:~$ cat install_rke.sh
#!/bin/bash
# install_rke.sh
echo "install rke : "
wget https://github.com/rancher/rke/releases/download/v0.1.11/rke_linux-amd64
chmod +x rke_linux-amd64
sudo mv rke_linux-amd64 /usr/local/bin/rke
echo "rke : "
which rke
echo "version : "
rke --version
ubuntu@lb01:~$ chmod +x install_rke.sh
ubuntu@lb01:~$ ./install_rke.sh
3.3 RKEコマンド実行
さきほど作成したrancher-cluster.ymlを指定して、LBノードからRKEコマンドを実行する。
実行時に以下のようなログが出力される。(長いので折りたたんである。200行くらい)
めでたく「Finished building Kubernetes cluster successfully」が出たら構築成功である。
rke up --config rancher-cluster.ymlの実行結果
ubuntu@lb01:~$ rke up --config rancher-cluster.yml
INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [192.168.0.111]
INFO[0000] [dialer] Setup tunnel for host [192.168.0.109]
INFO[0000] [dialer] Setup tunnel for host [192.168.0.110]
INFO[0001] [network] Deploying port listener containers
INFO[0001] [network] Pulling image [rancher/rke-tools:v0.1.15] on host [192.168.0.109]
INFO[0001] [network] Pulling image [rancher/rke-tools:v0.1.15] on host [192.168.0.110]
INFO[0001] [network] Pulling image [rancher/rke-tools:v0.1.15] on host [192.168.0.111]
INFO[0015] [network] Successfully pulled image [rancher/rke-tools:v0.1.15] on host [192.168.0.109]
INFO[0015] [network] Successfully pulled image [rancher/rke-tools:v0.1.15] on host [192.168.0.110]
INFO[0015] [network] Successfully started [rke-etcd-port-listener] container on host [192.168.0.109]
INFO[0015] [network] Successfully started [rke-etcd-port-listener] container on host [192.168.0.110]
INFO[0015] [network] Successfully pulled image [rancher/rke-tools:v0.1.15] on host [192.168.0.111]
INFO[0016] [network] Successfully started [rke-etcd-port-listener] container on host [192.168.0.111]
INFO[0017] [network] Successfully started [rke-cp-port-listener] container on host [192.168.0.110]
INFO[0017] [network] Successfully started [rke-cp-port-listener] container on host [192.168.0.109]
INFO[0017] [network] Successfully started [rke-cp-port-listener] container on host [192.168.0.111]
INFO[0017] [network] Successfully started [rke-worker-port-listener] container on host [192.168.0.109]
INFO[0017] [network] Successfully started [rke-worker-port-listener] container on host [192.168.0.110]
INFO[0017] [network] Successfully started [rke-worker-port-listener] container on host [192.168.0.111]
INFO[0017] [network] Port listener containers deployed successfully
INFO[0017] [network] Running etcd <-> etcd port checks
INFO[0018] [network] Successfully started [rke-port-checker] container on host [192.168.0.110]
INFO[0018] [network] Successfully started [rke-port-checker] container on host [192.168.0.109]
INFO[0018] [network] Successfully started [rke-port-checker] container on host [192.168.0.111]
INFO[0018] [network] Running control plane -> etcd port checks
INFO[0019] [network] Successfully started [rke-port-checker] container on host [192.168.0.109]
INFO[0019] [network] Successfully started [rke-port-checker] container on host [192.168.0.110]
INFO[0019] [network] Successfully started [rke-port-checker] container on host [192.168.0.111]
INFO[0019] [network] Running control plane -> worker port checks
INFO[0019] [network] Successfully started [rke-port-checker] container on host [192.168.0.109]
INFO[0019] [network] Successfully started [rke-port-checker] container on host [192.168.0.110]
INFO[0019] [network] Successfully started [rke-port-checker] container on host [192.168.0.111]
INFO[0019] [network] Running workers -> control plane port checks
INFO[0020] [network] Successfully started [rke-port-checker] container on host [192.168.0.109]
INFO[0020] [network] Successfully started [rke-port-checker] container on host [192.168.0.110]
INFO[0020] [network] Successfully started [rke-port-checker] container on host [192.168.0.111]
INFO[0020] [network] Checking KubeAPI port Control Plane hosts
INFO[0020] [network] Removing port listener containers
INFO[0020] [remove/rke-etcd-port-listener] Successfully removed container on host [192.168.0.111]
INFO[0020] [remove/rke-etcd-port-listener] Successfully removed container on host [192.168.0.110]
INFO[0020] [remove/rke-etcd-port-listener] Successfully removed container on host [192.168.0.109]
INFO[0021] [remove/rke-cp-port-listener] Successfully removed container on host [192.168.0.111]
INFO[0021] [remove/rke-cp-port-listener] Successfully removed container on host [192.168.0.110]
INFO[0021] [remove/rke-cp-port-listener] Successfully removed container on host [192.168.0.109]
INFO[0021] [remove/rke-worker-port-listener] Successfully removed container on host [192.168.0.110]
INFO[0021] [remove/rke-worker-port-listener] Successfully removed container on host [192.168.0.109]
INFO[0021] [remove/rke-worker-port-listener] Successfully removed container on host [192.168.0.111]
INFO[0021] [network] Port listener containers removed successfully
INFO[0021] [certificates] Attempting to recover certificates from backup on [etcd,controlPlane] hosts
INFO[0022] [certificates] Successfully started [cert-fetcher] container on host [192.168.0.109]
INFO[0022] [certificates] Successfully started [cert-fetcher] container on host [192.168.0.110]
INFO[0023] [certificates] Successfully started [cert-fetcher] container on host [192.168.0.111]
INFO[0023] [certificates] No Certificate backup found on [etcd,controlPlane] hosts
INFO[0023] [certificates] Generating CA kubernetes certificates
INFO[0023] [certificates] Generating Kubernetes API server certificates
INFO[0024] [certificates] Generating Kube Controller certificates
INFO[0024] [certificates] Generating Kube Scheduler certificates
INFO[0025] [certificates] Generating Kube Proxy certificates
INFO[0025] [certificates] Generating Node certificate
INFO[0026] [certificates] Generating admin certificates and kubeconfig
INFO[0026] [certificates] Generating etcd-192.168.0.109 certificate and key
INFO[0027] [certificates] Generating etcd-192.168.0.110 certificate and key
INFO[0027] [certificates] Generating etcd-192.168.0.111 certificate and key
INFO[0027] [certificates] Generating Kubernetes API server aggregation layer requestheader client CA certificates
INFO[0027] [certificates] Generating Kubernetes API server proxy client certificates
INFO[0028] [certificates] Temporarily saving certs to [etcd,controlPlane] hosts
INFO[0034] [certificates] Saved certs to [etcd,controlPlane] hosts
INFO[0034] [reconcile] Reconciling cluster state
INFO[0034] [reconcile] This is newly generated cluster
INFO[0034] [certificates] Deploying kubernetes certificates to Cluster nodes
INFO[0040] Successfully Deployed local admin kubeconfig at [./kube_config_rancher-cluster.yml]
INFO[0040] [certificates] Successfully deployed kubernetes certificates to Cluster nodes
INFO[0040] Pre-pulling kubernetes images
INFO[0040] [pre-deploy] Pulling image [rancher/hyperkube:v1.11.3-rancher1] on host [192.168.0.110]
INFO[0040] [pre-deploy] Pulling image [rancher/hyperkube:v1.11.3-rancher1] on host [192.168.0.109]
INFO[0040] [pre-deploy] Pulling image [rancher/hyperkube:v1.11.3-rancher1] on host [192.168.0.111]
INFO[0108] [pre-deploy] Successfully pulled image [rancher/hyperkube:v1.11.3-rancher1] on host [192.168.0.111]
INFO[0111] [pre-deploy] Successfully pulled image [rancher/hyperkube:v1.11.3-rancher1] on host [192.168.0.109]
INFO[0119] [pre-deploy] Successfully pulled image [rancher/hyperkube:v1.11.3-rancher1] on host [192.168.0.110]
INFO[0119] Kubernetes images pulled successfully
INFO[0119] [etcd] Building up etcd plane..
INFO[0119] [etcd] Pulling image [rancher/coreos-etcd:v3.2.18] on host [192.168.0.109]
INFO[0127] [etcd] Successfully pulled image [rancher/coreos-etcd:v3.2.18] on host [192.168.0.109]
INFO[0127] [etcd] Successfully started [etcd] container on host [192.168.0.109]
INFO[0127] [etcd] Saving snapshot [etcd-rolling-snapshots] on host [192.168.0.109]
INFO[0127] [etcd] Successfully started [etcd-rolling-snapshots] container on host [192.168.0.109]
INFO[0128] [certificates] Successfully started [rke-bundle-cert] container on host [192.168.0.109]
INFO[0128] [certificates] successfully saved certificate bundle [/opt/rke/etcd-snapshots//pki.bundle.tar.gz] on host [192.168.0.109]
INFO[0129] [etcd] Successfully started [rke-log-linker] container on host [192.168.0.109]
INFO[0129] [remove/rke-log-linker] Successfully removed container on host [192.168.0.109]
INFO[0129] [etcd] Pulling image [rancher/coreos-etcd:v3.2.18] on host [192.168.0.110]
INFO[0136] [etcd] Successfully pulled image [rancher/coreos-etcd:v3.2.18] on host [192.168.0.110]
INFO[0136] [etcd] Successfully started [etcd] container on host [192.168.0.110]
INFO[0136] [etcd] Saving snapshot [etcd-rolling-snapshots] on host [192.168.0.110]
INFO[0137] [etcd] Successfully started [etcd-rolling-snapshots] container on host [192.168.0.110]
INFO[0137] [certificates] Successfully started [rke-bundle-cert] container on host [192.168.0.110]
INFO[0137] [certificates] successfully saved certificate bundle [/opt/rke/etcd-snapshots//pki.bundle.tar.gz] on host [192.168.0.110]
INFO[0138] [etcd] Successfully started [rke-log-linker] container on host [192.168.0.110]
INFO[0138] [remove/rke-log-linker] Successfully removed container on host [192.168.0.110]
INFO[0138] [etcd] Pulling image [rancher/coreos-etcd:v3.2.18] on host [192.168.0.111]
INFO[0148] [etcd] Successfully pulled image [rancher/coreos-etcd:v3.2.18] on host [192.168.0.111]
INFO[0148] [etcd] Successfully started [etcd] container on host [192.168.0.111]
INFO[0148] [etcd] Saving snapshot [etcd-rolling-snapshots] on host [192.168.0.111]
INFO[0149] [etcd] Successfully started [etcd-rolling-snapshots] container on host [192.168.0.111]
INFO[0149] [certificates] Successfully started [rke-bundle-cert] container on host [192.168.0.111]
INFO[0150] [certificates] successfully saved certificate bundle [/opt/rke/etcd-snapshots//pki.bundle.tar.gz] on host [192.168.0.111]
INFO[0150] [etcd] Successfully started [rke-log-linker] container on host [192.168.0.111]
INFO[0150] [remove/rke-log-linker] Successfully removed container on host [192.168.0.111]
INFO[0150] [etcd] Successfully started etcd plane..
INFO[0150] [controlplane] Building up Controller Plane..
INFO[0151] [controlplane] Successfully started [kube-apiserver] container on host [192.168.0.109]
INFO[0151] [healthcheck] Start Healthcheck on service [kube-apiserver] on host [192.168.0.109]
INFO[0152] [controlplane] Successfully started [kube-apiserver] container on host [192.168.0.111]
INFO[0152] [healthcheck] Start Healthcheck on service [kube-apiserver] on host [192.168.0.111]
INFO[0152] [controlplane] Successfully started [kube-apiserver] container on host [192.168.0.110]
INFO[0152] [healthcheck] Start Healthcheck on service [kube-apiserver] on host [192.168.0.110]
INFO[0169] [healthcheck] service [kube-apiserver] on host [192.168.0.109] is healthy
INFO[0169] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.109]
INFO[0169] [remove/rke-log-linker] Successfully removed container on host [192.168.0.109]
INFO[0170] [controlplane] Successfully started [kube-controller-manager] container on host [192.168.0.109]
INFO[0170] [healthcheck] Start Healthcheck on service [kube-controller-manager] on host [192.168.0.109]
INFO[0170] [healthcheck] service [kube-apiserver] on host [192.168.0.110] is healthy
INFO[0170] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.110]
INFO[0171] [remove/rke-log-linker] Successfully removed container on host [192.168.0.110]
INFO[0171] [healthcheck] service [kube-apiserver] on host [192.168.0.111] is healthy
INFO[0171] [controlplane] Successfully started [kube-controller-manager] container on host [192.168.0.110]
INFO[0171] [healthcheck] Start Healthcheck on service [kube-controller-manager] on host [192.168.0.110]
INFO[0171] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.111]
INFO[0172] [remove/rke-log-linker] Successfully removed container on host [192.168.0.111]
INFO[0172] [controlplane] Successfully started [kube-controller-manager] container on host [192.168.0.111]
INFO[0172] [healthcheck] Start Healthcheck on service [kube-controller-manager] on host [192.168.0.111]
INFO[0175] [healthcheck] service [kube-controller-manager] on host [192.168.0.109] is healthy
INFO[0176] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.109]
INFO[0176] [healthcheck] service [kube-controller-manager] on host [192.168.0.110] is healthy
INFO[0176] [remove/rke-log-linker] Successfully removed container on host [192.168.0.109]
INFO[0177] [controlplane] Successfully started [kube-scheduler] container on host [192.168.0.109]
INFO[0177] [healthcheck] Start Healthcheck on service [kube-scheduler] on host [192.168.0.109]
INFO[0177] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.110]
INFO[0177] [remove/rke-log-linker] Successfully removed container on host [192.168.0.110]
INFO[0177] [controlplane] Successfully started [kube-scheduler] container on host [192.168.0.110]
INFO[0177] [healthcheck] Start Healthcheck on service [kube-scheduler] on host [192.168.0.110]
INFO[0178] [healthcheck] service [kube-controller-manager] on host [192.168.0.111] is healthy
INFO[0179] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.111]
INFO[0179] [remove/rke-log-linker] Successfully removed container on host [192.168.0.111]
INFO[0179] [controlplane] Successfully started [kube-scheduler] container on host [192.168.0.111]
INFO[0179] [healthcheck] Start Healthcheck on service [kube-scheduler] on host [192.168.0.111]
INFO[0182] [healthcheck] service [kube-scheduler] on host [192.168.0.109] is healthy
INFO[0183] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.109]
INFO[0183] [healthcheck] service [kube-scheduler] on host [192.168.0.110] is healthy
INFO[0183] [remove/rke-log-linker] Successfully removed container on host [192.168.0.109]
INFO[0183] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.110]
INFO[0184] [remove/rke-log-linker] Successfully removed container on host [192.168.0.110]
INFO[0185] [healthcheck] service [kube-scheduler] on host [192.168.0.111] is healthy
INFO[0185] [controlplane] Successfully started [rke-log-linker] container on host [192.168.0.111]
INFO[0186] [remove/rke-log-linker] Successfully removed container on host [192.168.0.111]
INFO[0186] [controlplane] Successfully started Controller Plane..
INFO[0186] [authz] Creating rke-job-deployer ServiceAccount
INFO[0186] [authz] rke-job-deployer ServiceAccount created successfully
INFO[0186] [authz] Creating system:node ClusterRoleBinding
INFO[0186] [authz] system:node ClusterRoleBinding created successfully
INFO[0186] [certificates] Save kubernetes certificates as secrets
INFO[0186] [certificates] Successfully saved certificates as kubernetes secret [k8s-certs]
INFO[0186] [state] Saving cluster state to Kubernetes
INFO[0187] [state] Successfully Saved cluster state to Kubernetes ConfigMap: cluster-state
INFO[0187] [state] Saving cluster state to cluster nodes
INFO[0187] [state] Successfully started [cluster-state-deployer] container on host [192.168.0.109]
INFO[0187] [remove/cluster-state-deployer] Successfully removed container on host [192.168.0.109]
INFO[0188] [state] Successfully started [cluster-state-deployer] container on host [192.168.0.110]
INFO[0188] [remove/cluster-state-deployer] Successfully removed container on host [192.168.0.110]
INFO[0189] [state] Successfully started [cluster-state-deployer] container on host [192.168.0.111]
INFO[0189] [remove/cluster-state-deployer] Successfully removed container on host [192.168.0.111]
INFO[0189] [worker] Building up Worker Plane..
INFO[0189] [remove/service-sidekick] Successfully removed container on host [192.168.0.109]
INFO[0189] [remove/service-sidekick] Successfully removed container on host [192.168.0.110]
INFO[0189] [remove/service-sidekick] Successfully removed container on host [192.168.0.111]
INFO[0189] [worker] Successfully started [kubelet] container on host [192.168.0.109]
INFO[0189] [healthcheck] Start Healthcheck on service [kubelet] on host [192.168.0.109]
INFO[0189] [worker] Successfully started [kubelet] container on host [192.168.0.110]
INFO[0189] [healthcheck] Start Healthcheck on service [kubelet] on host [192.168.0.110]
INFO[0190] [worker] Successfully started [kubelet] container on host [192.168.0.111]
INFO[0190] [healthcheck] Start Healthcheck on service [kubelet] on host [192.168.0.111]
INFO[0195] [healthcheck] service [kubelet] on host [192.168.0.109] is healthy
INFO[0195] [healthcheck] service [kubelet] on host [192.168.0.110] is healthy
INFO[0195] [healthcheck] service [kubelet] on host [192.168.0.111] is healthy
INFO[0195] [worker] Successfully started [rke-log-linker] container on host [192.168.0.109]
INFO[0195] [worker] Successfully started [rke-log-linker] container on host [192.168.0.110]
INFO[0196] [remove/rke-log-linker] Successfully removed container on host [192.168.0.109]
INFO[0196] [remove/rke-log-linker] Successfully removed container on host [192.168.0.110]
INFO[0196] [worker] Successfully started [rke-log-linker] container on host [192.168.0.111]
INFO[0196] [worker] Successfully started [kube-proxy] container on host [192.168.0.109]
INFO[0196] [healthcheck] Start Healthcheck on service [kube-proxy] on host [192.168.0.109]
INFO[0196] [worker] Successfully started [kube-proxy] container on host [192.168.0.110]
INFO[0196] [healthcheck] Start Healthcheck on service [kube-proxy] on host [192.168.0.110]
INFO[0196] [remove/rke-log-linker] Successfully removed container on host [192.168.0.111]
INFO[0196] [worker] Successfully started [kube-proxy] container on host [192.168.0.111]
INFO[0196] [healthcheck] Start Healthcheck on service [kube-proxy] on host [192.168.0.111]
INFO[0201] [healthcheck] service [kube-proxy] on host [192.168.0.109] is healthy
INFO[0201] [healthcheck] service [kube-proxy] on host [192.168.0.110] is healthy
INFO[0202] [worker] Successfully started [rke-log-linker] container on host [192.168.0.109]
INFO[0202] [worker] Successfully started [rke-log-linker] container on host [192.168.0.110]
INFO[0202] [healthcheck] service [kube-proxy] on host [192.168.0.111] is healthy
INFO[0202] [remove/rke-log-linker] Successfully removed container on host [192.168.0.109]
INFO[0202] [remove/rke-log-linker] Successfully removed container on host [192.168.0.110]
INFO[0203] [worker] Successfully started [rke-log-linker] container on host [192.168.0.111]
INFO[0203] [remove/rke-log-linker] Successfully removed container on host [192.168.0.111]
INFO[0203] [worker] Successfully started Worker Plane..
INFO[0203] [sync] Syncing nodes Labels and Taints
INFO[0205] [sync] Successfully synced nodes Labels and Taints
INFO[0205] [network] Setting up network plugin: canal
INFO[0205] [addons] Saving addon ConfigMap to Kubernetes
INFO[0205] [addons] Successfully Saved addon to Kubernetes ConfigMap: rke-network-plugin
INFO[0205] [addons] Executing deploy job..
INFO[0215] [addons] Setting up KubeDNS
INFO[0215] [addons] Saving addon ConfigMap to Kubernetes
INFO[0215] [addons] Successfully Saved addon to Kubernetes ConfigMap: rke-kubedns-addon
INFO[0215] [addons] Executing deploy job..
INFO[0220] [addons] KubeDNS deployed successfully..
INFO[0220] [addons] Setting up Metrics Server
INFO[0220] [addons] Saving addon ConfigMap to Kubernetes
INFO[0220] [addons] Successfully Saved addon to Kubernetes ConfigMap: rke-metrics-addon
INFO[0220] [addons] Executing deploy job..
INFO[0225] [addons] KubeDNS deployed successfully..
INFO[0225] [ingress] Setting up nginx ingress controller
INFO[0225] [addons] Saving addon ConfigMap to Kubernetes
INFO[0225] [addons] Successfully Saved addon to Kubernetes ConfigMap: rke-ingress-controller
INFO[0225] [addons] Executing deploy job..
INFO[0230] [ingress] ingress controller nginx is successfully deployed
INFO[0230] [addons] Setting up user addons
INFO[0230] [addons] no user addons defined
INFO[0230] Finished building Kubernetes cluster successfully
ubuntu@lb01:~$
3.4 kube_config_rancher-cluster.yml配布
- kube_config_rancher-cluster.yml配布
rkeコマンドによりrancher-server用ノードにkubernetesがインストールされると、LBノードにはkube_config_rancher-cluster.ymlが作成されている。
これをLBノードからrancher-server用ノード全台に配布する。
ubuntu@lb01:~$ ls
ubuntu@lb01:~$ cat kube_config_rancher-cluster.yml
ubuntu@lb01:~$ scp kube_config_rancher-cluster.yml ubuntu@master01:/home/ubuntu/
ubuntu@lb01:~$ scp kube_config_rancher-cluster.yml ubuntu@master02:/home/ubuntu/
ubuntu@lb01:~$ scp kube_config_rancher-cluster.yml ubuntu@master03:/home/ubuntu/
- .profileへの設定追加
YAML配布後、各rancher-server用ノードでkube_config_rancher-cluster.ymlを利用できるように.profileに設定を追加する
ubuntu@master01:~$ cp kube_config_rancher-cluster.yml kube_config_rancher-cluster.yml.org
ubuntu@master01:~$ cp .profile .profile.org
ubuntu@master01:~$ cat .profile
ubuntu@master01:~$ echo "export KUBECONFIG=/home/ubuntu/kube_config_rancher-cluster.yml" >> .profile
ubuntu@master01:~$ cat .profile
ubuntu@master01:~$ source .profile
ubuntu@master01:~$ env|grep KUBE
KUBECONFIG=/home/ubuntu/kube_config_rancher-cluster.yml
ubuntu@master01:~$
3.5 kubectlインストールと動作確認
rancher-server用ノード全台でkubectlをインストールする。
入れたあと、get nodes、get podsで軽く動作確認する。
ubuntu@master01:~$ sudo apt-get update && sudo apt-get install -y apt-transport-https
ubuntu@master01:~$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
ubuntu@master01:~$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
ubuntu@master01:~$ sudo apt-get update && sudo apt-get install -y kubectl
ubuntu@master01:~$ which kubectl
ubuntu@master01:~$ kubectl get nodes
ubuntu@master01:~$ kubectl get pods --all-namespaces -o wide
4. Helmインストール
Initialize Helm (Install tiller)に従い、rancher-server用ノードでTillerをインストールする。
ここでは、master01にて作業する。
4.1 Tillerサービスアカウントの設定
Tiller用のサービスアカウントを「kube-system」名前空間で作成し、
ロールとして「cluster-admin」を結びつけるClusterrole Bindingを作成する。
ubuntu@master01:~$ kubectl -n kube-system create serviceaccount tiller
ubuntu@master01:~$ kubectl -n kube-system get sa tiller -o yaml
ubuntu@master01:~$ kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
4.2 kubectlによる状態確認
Clusterrole Bindingの作成後の確認ついでに、kubectlコマンドにより、サービスアカウントや
ロール、コンテキストについて状態確認した。
ubuntu@master01:~$ kubectl config get-contexts
ubuntu@master01:~$ kubectl config view
ubuntu@master01:~$ kubectl get clusterrolebinding tiller -o yaml
ubuntu@master01:~$ kubectl get clusterrole cluster-admin -o yaml
ubuntu@master01:~$ kubectl get clusterrolebindings
ubuntu@master01:~$ kubectl get clusterroles
ubuntu@master01:~$ kubectl get serviceaccounts
ubuntu@master01:~$ kubectl get serviceaccounts -n kube-system
4.3 Helmインストール
このあとでrancherをインストールするために、master01でhelmをインストールする。
helm初期化時は、さきほど作成したサービスアカウントtillerを指定する。
ubuntu@master01:~$ wget https://storage.googleapis.com/kubernetes-helm/helm-v2.11.0-linux-amd64.tar.gz
ubuntu@master01:~$ tar -zxvf helm-v2.11.0-linux-amd64.tar.gz
ubuntu@master01:~$ sudo mv linux-amd64/helm /usr/local/bin/helm
ubuntu@master01:~$ which helm
ubuntu@master01:~$ helm init --service-account tiller
ubuntu@master01:~$ kubectl -n kube-system rollout status deploy/tiller-deploy
ubuntu@master01:~$ helm version
5. cert-managerとrancherのインストール
Install Rancherに従い、helmによりcert-managerとrancherをインストールする。
5.1 Helmリポジトリ追加
master01にて、rancherのリポジトリを追加する。
ubuntu@master01:~$ helm repo list
ubuntu@master01:~$ helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
ubuntu@master01:~$ helm repo list
5.2 cert-managerインストール
4 - Install Rancherにおいて、今回「Rancher Generated Certificates」によりrancherをインストールするので、cert-managerが必要となる。
以下のコマンドにより、名前空間「kube-system」にcert-managerをインストールする。
インストールされたことを、helm lsにより確認する。
ubuntu@master01:~$ helm install stable/cert-manager --name cert-manager --namespace kube-system
ubuntu@master01:~$ helm ls --all
5.3 rancherインストール
rancherをhelmによりインストールする。
「Set the hostname to the DNS name you pointed at your load balancer.」
とあるので、その通り指定する。変な名前は指定しない。
ubuntu@master01:~$ helm install rancher-latest/rancher --name rancher --namespace cattle-system --set hostname=lb01.openstacklocal
ubuntu@master01:~$ helm ls --all
ubuntu@master01:~$ kubectl get pods -n ingress-nginx
もし設定を変えたい、などの理由でrancherを入れなおすときは、一度以下のコマンドで
rancherを削除してから、再度入れなおすこと。
ubuntu@master01:~$ helm del --purge rancher
6. LB構築
NGINXに従い、LBノードでnginxによるL4ロードバランサを構築する。
6.1 nginxインストール
Ubuntu 16.04 (Xenial)でのnginxインストール手順を参考に、LBノードにnginxをインストールする。
ubuntu@lb01:~$ cat add_nginx_list.sh
#!/bin/bash
# add_nginx_list.sh
listfile=/etc/apt/sources.list.d/nginx.list
if [ ! -f $listfile ]; then
cat <<EOF > $listfile
deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx
EOF
fi
if [ -f $listfile ]; then
echo "print nginx.list..."
cat $listfile
fi
ubuntu@lb01:~$ chmod +x add_nginx_list.sh
ubuntu@lb01:~$ sudo bash ./add_nginx_list.sh
ubuntu@lb01:~$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
ubuntu@lb01:~$ sudo apt-get update
ubuntu@lb01:~$ sudo apt-get install nginx
なお、apt-keyコマンドを実行しなかった場合、sudo apt-get updateの時に
以下のようなエラーメッセージが出てしまうので、上記のように
apt-keyコマンドを実施後にsudo apt-get updateという手順にしてある。
W: GPG error: http://nginx.org/packages/ubuntu xenial Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY $key
6.2 nginxの設定
nginxの設定ファイルにrancher-serverへの振り分けをする設定をしてnginxを起動する。
NGINXでは「# nginx -s reload」を実行していたが、nginxをインストールした直後は起動していないので、単純にnginxコマンド実行にて起動した。
ubuntu@lb01:~$ sudo su
root@lb01:/home/ubuntu# cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org
root@lb01:/home/ubuntu# vi /etc/nginx/nginx.conf
root@lb01:/home/ubuntu# cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
stream {
upstream rancher_servers {
least_conn;
server 192.168.0.109:443 max_fails=3 fail_timeout=5s;
server 192.168.0.110:443 max_fails=3 fail_timeout=5s;
server 192.168.0.111:443 max_fails=3 fail_timeout=5s;
}
server {
listen 443;
proxy_pass rancher_servers;
}
}
root@lb01:/home/ubuntu# sudo nginx
nginx設定後、lb01にて
curl -k -X GET https://lb01.openstacklocal/
を何度か実行してみて、tcpdumpにより通信先がmaster#1~3で振分けできているか確認しておく。
7. 動作確認
ここまでで、L4ロードバランサ含めて構築ができたので、動作確認をしてみる。
今回、踏み台サーバを挟んだ先に環境構築しているため、Rancherの画面を確認するには一工夫いる。
7.1 踏み台サーバからのsshポート転送
- 踏み台サーバにsshログインのうえ、localhost:https(443)を172.16.24.150:443へssh転送する。
- Tera Termにて以下のように設定
7.2 名前解決設定の確認
クライアントからバックエンドにいたるまでのどこかで名前解決が適切に行われなかった場合、正しくrancher画面が見られず、「default backend - 404」画面を見ることになる。
そのため、ここでLBノード、踏み台サーバ、クライアントの名前解決設定(hosts設定)を確認しておき、必要に応じ修正する。
- LBノードでのhosts設定
LBノードの/etc/hostsに以下がない場合は、追記しておく。
192.168.0.108 lb01.openstacklocal
- 踏み台でのhosts設定
踏み台サーバの/etc/hostsに以下がない場合は、追記しておく
172.16.24.150 lb01.openstacklocal
- クライアント側でのhosts設定
helmでrancherをインストールする際、「--set hostname=lb01.openstacklocal」を指定したが、これが証明書のCommon Nameになっている。
そのため、ssh転送した上でブラウザからrancher画面にアクセスするとき、
「https://127.0.0.1/」
ではなく、CNにあわせて
「https://lb01.openstacklocal/」
によりアクセスする必要がある。
ということは、クライアント側のhostsに「127.0.0.1 lb01.openstacklocal」の
組合わせを記載しないとならない。メモ帳を管理者で起動して
C:\Windows\System32\drivers\etc\hosts
を編集することで、lb01.openstacklocalを127.0.0.1と対応づけるよう設定する。
# (略)
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost lb01.openstacklocal
また、プロキシ環境からのアクセスになるため、「lb01.openstacklocal」にはプロキシなしで接続するようにブラウザで設定しないといけない。
7.3 クライアントからのアクセス
rancher画面に、ブラウザからアクセスしてみる。無事に開けますように。
無事、開けました!
さて、とりあえずrancher画面までは辿り着いたものの、この時点ではその先をあまり触れていない
という意味で、ここまでで構築時に問題なかったのか?は、あまり確認できていないと言えます。
そのため別の機会に、このあとの動作確認と合わせ何か新機能などを試してみて、結果をご報告したいと思います!
参考
この記事を書くにあたり、以下を参考にさせていただきました。
Docker
Rancher
RKE
Helm
Nginx
まとめ
- Rancher 2.1のHA installでの構築をやってみました。
- Rancherは機能盛りだくさん。今後も
当社のコラム・ブログ「情報畑でつかまえて」で引き続き、Rancherやコンテナに関する記事を投稿予定です!