© Hitachi, Ltd. 2016. All rights reserved.
Rancher による社内向けテナントサービス基盤
2017/3/15
Keita Shimada
Hitachi, Ltd.
はじめに
本資料に記載されている会社名、商品、サービス名等は各社の登録商標または商標です。
本資料中は、”™ ”️、”® ”️は明記しておりませんのでご了承下さい。
1
自己紹介
名前:嶋田敬太
経歴:2009年に日立製作所に入所
サーバ運用管理ソフトの機能検討
ストレージ運用管理ソフトの機能検討
モバイルアプリ生産性向上についての検討
DevOpsの実践をサポートするサービスの検討
&社内クラウドでのOSSの活用実践
2
現在の仕事
RANCHERについての印象
きっかけ
社内のOSS調査の中でRancher担当を拝命。
Rancherの第一印象
UIがカッコイイ👍
Rancher 自身の立ち上げが簡単👍
3
RANCHERについての印象
更に使っていくと…
カタログでサービス(スタック)を簡単にデプロイして試せるので便利。
ITインフラのことはあまり意識したくないが、自分のサービスが何処で動いているか全くわからないのも不安。。。というようなユーザでも簡単にUIで管理ができる。
4
RANCHERで何をしたいか
社内の開発者や開発グループに、社内クラウド上で
OSSを積極的に活用してもらい、知識やノウハウを蓄積したり、新しいサービスを創生する場を作りたい。
そのために、Rancherで開発者が、簡単に、素早く、どんどんサービスを試したり、そ
れを活用した自身のサービスを作成/提供できる基盤を提供したい。
5
理想とする使われ方
簡単に、素早く、どんどん
サービスを立ち上げて、
それを他の人に使ってもらって
フィードバックをもらって、
サービスを創生/改良する。
6
やりたいこと/要件
テナント提供
開発者や開発グループにテナント単位でITリソースを提供し、そのテナント内でサービスを立ち上げて利用できる。
サービス公開
テナントで立ち上げたサービスに社内クラウドユーザが利用できるように公開できる。
テンプレートのシェア
テナントで作ったサービスをテンプレートとして他のテナントとシェアできるようにする。
既存サービスとの連携
社内のクラウド上ですでに提供されているOSSサービスと連携する。
社内認証基盤との連携
テナントのログイン処理等には、社内認証基盤(LDAP)を利用する。
7
External network
RANCHERによるテナントサービス基盤
8
Catalogs(Git repositories)
Corp. Catalogs User Catalogs
Tenant(Environment)
Rancher Sever
(Container)
Docker host Docker host
・・・
・・・
Stack
Stack・・・
User Catalog
User Catalog
Catalog
Catalog
Corp.
LDAP
ServiceUser
Portal
Registries
User
Registry
Crop.
Registry
LB/Reverse proxy
・・・
Tenant users
Infra. administrators
・・・
テナント提供
サービス公開
テンプレートのシェア
既存サービスとの連携
Chat/GitLab…
社内認証基盤との連携
今回紹介する取り組み
テナント提供
開発者や開発グループにテナント単位でITリソースを提供し、そのテナント内でサービスを立ち上げて利用できる。
サービス公開
テナントで立ち上げたサービスに社内クラウドユーザが利用できるように公開できる。
テンプレートのシェア
テナントで作ったサービスをテンプレートとして他のテナントとシェアできるようにする。
既存サービスとの連携
社内のクラウド上ですでに提供されているOSSサービスと連携する。
社内認証基盤との連携
テナントのログイン処理等には、社内認証基盤(LDAP)を利用する。
9
なぜ、要件の中でもサービス公開のところを取り上げる?
10
理想とする使われ方
簡単に、素早く、どんどん
サービスを立ち上げて、
それを他の人に使ってもらって
フィードバックをもらって、
サービスを創生/改良する。
11
現状の課題
Rancherを使えば簡単に、素早く、どんどんサービスの起動やデプロイはできる!
・・・しかし、そのままではRancher上のサービスを社内で使いこなすのは難しい。
ポート制限
ドメイン利用 …
12
手元のPCから社内クラウド上に立ち上げたサービスを利用する際は、情シス部門が解放しているポートを利用する必要がある。
現状の課題(ポート制限)13
Stack #1(172.10.10.1:80)
Stack #2(172.10.10.1:81)
たくさんサービスを立ち上げたがポートが…
Dockerホストをまた立てる(IPを別にして同じポート番号使
う)か…
情シスにお願いしてポート開けてもらうほどでも…セキュリティ的にも厳
しいしね。
Corp. Cloud
・・・
x.x.x.x: 80->Allowed
x.x.x.x: 81->Refused
Rancherに起因する問題というよりもDockerコンテナを利用するようになったから顕著になった。
現状の課題(ドメイン利用)
DNSへのドメイン登録をしたい・・・しかし、本格稼働するかまだ分からないサービスを立ち上げる度に情シス部門にお願いするのは・・・
14
Stack #1(172.10.10.1:80)
Stack #2(172.10.10.2:81)
Corp. Cloud
tenant1.example.com<->172.10.10.1
tenant2.example.com<->172.10.10.2
②ドメイン登録
DNS server テナントユーザ
情シスDNS
サーバ管理者
①ドメイン登録のお願い
理想と現状のギャップ
Rancherを社内で使いこなすために、理想と現実のギャップの原因となるポート制限、ドメインサービス利用 etc.の問題を解決したい。
15
解決のためのアプローチ
ポート制限ー>使えるポートが少ないが、安易にポートを開くことはしたくない。
ー>使えるポートを複数サービス(コンテナ)で使えるようにする。
ー>そのためにリバースプロキシ使ってみよう!
ドメイン利用ー>ドメインを自由に設定したいが、DNSサーバの設定を騙取する権限がない。毎回、管理者に頼むのが大変。
ー>テナントにサブドメインを与えて、サブドメイン以下の設定は自由に設定できるようにしよう!
ー>そのためにリバースプロキシ使ってみよう!
16
TRAEFIKHTTPS://TRAEFIK.IO
モダンHTTPリバースプロキシ/ロードバランサ
ルーティングの情報などの設定情報を動的に変更することが可能。
設定情報を管理するためにバックエンドサービスと連携可能。連携可能なバックエンドサービスは複数存在(Consul,Zookeeper,etcd etc.)。
17
なぜTRAEFIK?
Rancher Cattle向けCommunity CatalogにExperimental版が提供されており、Rancher向けに調整されていたから。
UIで設定が簡単に確認できる。
デファクトとなっているもの以外を試してみたかった。
18Traefikカタログ
TRAEFIK(RANCHERカタログ版)の設定
traefikと連携させたいDockerホストにtraefik
用のラベルをつける。
スタックのdocker-compose.ymlにtraefik用のラベルを設定する。
上記の設定を行った上でスタックを稼働させると以下のパスでtraefik経由でのスタックへのアクセスが可能になる。
19
http://${サービス名}.${スタック名}.${traefikのドメイン名}:${httpポート番号}
DOCKERホストへのラベル付け
20
• traefikと連携させたいDockerホストに以下ラベルを付ける。
traefik_lb = true• ラベルをつけられたDocker
ホスト上にtraefikのコンテナが配備され、そのDokcer
ホストはtraefik用の管理下に入る。
スタックのDOCKER-COMPOSE.YML
への設定
21
myservice:
image: sample-image
ports:
- "80:80"
labels:
//traefik経由で公開するポート
traefik.port: ‘8080’
//traefikのドメイン名
traefik.domain: tenant1.example.com
//traefik経由で公開するか否かと公開するURLの形式の選択
traefik.enable: 'true'
設定追加箇所
• スタックを配備する前にdocker-
compose.ymlにtraefik用のラベルを追加する。
• 本スライドで紹介したのは設定項目のごく一部。多くの設定項目が存在し、詳細な設定が可能…なはず。
TRAEFIK UI
(FOR INFRA. ADMIN/TENANT USERS)22
テナントサービスとして提供するためには
traefik Catalogでルーティングはできた。
しかし、残念ならがらtraefikカタログが提供できるのは、一つのテナント(Environment)内でのリバースプロキシ/ロードバランサ機能。
複数テナントへのサブドメインの割り当てもやりたい。
あと、docker-compose.ymlでラベル設定するから、スタックのデプロイ後に設定を変える方法ができるか不明…(調査要)
23
Mgmt. tenant
Tenant #1
External network
テナント向けNW構成
24
Infra. admin.
LB/Reverse proxy
Tenant #2
LB/Reverse proxy
Stack #1
Stack #2
・・・
Tenant#1 users
LB/Reverse proxy
• Rancherサービスの管理者(Infra. admin.)がテナント向けにテナントドメイン(サブドメイン)を割り当てる。
• テナントユーザはテナントに設置したtraefikのサービスと割り当てられたサブドメインを使って、テナント内のStackにアクセスさせる。
xxx.example.com
xxx.tenant1.exam
ple.com
テナントドメインを提供をします。あとはご自由に。
テナントドメインから先は自由に使います。
Mgmt. tenant
Tenant #1
External network
テナント向けNW構成
25
Infra. admin.
LB/Reverse proxy
(traefik Catalog)
Tenant #2
LB/Reverse proxy
Stack #1
Stack #2
・・・
Tenant#1 users
LB/Reverse proxy
xxx.example.com
ここはtraefikカタログでできる世界
各テナントに動的にサブドメインを割り当てるサービスが欲しい
ここはtraefikカタログでできる世界
xxx.tenant1.exam
ple.com
CONSULHTTPS://WWW.CONSUL.IO/
サービスディスカバリ、サービスヘルスチェック、KVSサービスを提供するツール群。
今回はtraefikの設定情報を動的に変更するためにKVSサービスを使う。
curlなどで設定項目を動的に変更できる点がgood👍
26
TRAEFIK+CONSULの構築と設定
ごめんなさい。省略します…
以下のサイトを参考にさせていただきました。こちらを参考にすれば構築はできるはず。
“気になるインテリジェント負荷分散traefikを試してみる“
http://www.casleyconsulting.co.jp/blog-engineer/%E3%82%B5%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9/%E6%B0%97%E3%81%AB%E3%81%AA
%E3%82%8B-
%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AA%E3%82%B8%E3%
82%A7%E3%83%B3%E3%83%88%E8%B2%A0%E8%8D%B7%E5%88%86%E6%95%A3-traefik-
%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF/
27
TRAEFIK+CONSULを使った感想
簡単に設定を変えられる。特に自動化などをす
るならばcurlとかでREST API叩けるので便利。
ConsulのREST APIでConsulのKVSに設定情報を
セット
ConsulのUIでConsulのKVSに設定情報をセット
ちなみに設定情報の確認のみなら前述のtraefik
UIでも可能。
28
CONSUL UIの設定例
(FOR INFRA. ADMIN)29
Mgmt. tenant
Tenant #1
External network
テナント向けNW構成(現在)
30
Config mgmt
(Consul)
Infra. admin.
LB/Reverse proxy
(traefik Catalog)
Tenant #2
LB/Reverse proxy
Stack #1
Stack #2
・・・
Tenant#1 users
LB/Reverse proxy
(traefik)
• Rancherサービスの管理者(Infra. admin.)がテナント向けにテナントドメイン(サブドメイン)を割り当てる。
• テナントユーザはテナントに設置したtraefikのサービスと割り当てられたサブドメインを使って、テナント内のStackにアクセスさせる。
xxx.example.com
xxx.tenant1.exam
ple.com
テナントドメインを提供をします。あとはご自由に。
テナントドメインから先は自由に使います。
今後実現したいこと
実はテナントごとにtraefikコンテナを動かすメリットはあまりないと思っているので、管理用テナントのtrafikでテナントのサービスを集中管理するようにしたい。
今回はtraefik Catalogを使いたかったこともあり現在の構成になっているが。。。
テナントごとにコンテナを管理させるのは面倒。
Chatbot経由でテナントユーザが使いたい時にドメイン登録できるようにしたい。
Consulでcurlとかで動的に設定変えられるようにしたことだし。
管理エリアのtraefikとConsulのカタログ化。
31
Mgmt. tenant Tenant #1
External network
テナント向けNW構成(これから)
32
Config mgmt
(Consul)
Infra. admin.
Tenant #2
Stack #1
Stack #2
LB/Reverse proxy
(traefik)
• やりたいことは前の構成の時と同じ。• よくよく考えるとTenantごとにtraefikコンテナを動
かすメリットがあまりない。• Mgmt. tenantのTrafikでテナントのサービスを集中
管理する。• Chatbot経由でテナントユーザが使いたい時にドメ
イン登録。
xxx.example.com
stack1.tenant1.exam
ple.com
Chatbot
stack2.tenant1.
example.com
Tenant#1 users
・・・
まとめ
Rancherを使えば簡単に、素早く、どんどんサービスの起動やデプロイはできる!
しかし、そのままではRancher上のサービスを社内の制約上使いこなすのは難しかった。特にネット
ワーク関係。
traefikで上手にルーティングしてあげれると社内の制約
が多い環境でも自由度の高いテナント環境が作れる。
Consulも活用するとREST APIでルーティング情報が変
更できるのでネットワーク設定の自動化が捗る。
33
RANCHERにあったら嬉しい機能(既にあったら教えてください!!)
Docker hostをRemoveした後に、Docker hostに残るシステムコンテナを簡単に削除したい。
一度RemoveしたDocker hostを再度他のRancher serverやEnvironmentで管理したい時に必要ないので消したい。。。今は一つ一つコンテナを消すかDockerを入れ直している。
新しいDocker hostとして Add Hostしたあとにスタックを確認すると、システムコンテナのステータスが異常(Initializing状態のまま)になっていたりとか。
34
参考にした情報
traefik
https://traefik.io/
Consul
https://www.consul.io/
気になるインテリジェント負荷分散traefikを試してみる
http://www.casleyconsulting.co.jp/blog-engineer/%E3%82%B5%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9/%E6%B0%97%E3%81%AB%E3%81%AA%E3%82%8B-%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AA%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E8%B2%A0%E8%8D%B7%E5%88%86%E6%95%A3-traefik-%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF/
35
ご静聴ありがとうございました。
THANK YOU
36