2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

docker+gvisor上でkeycloakを動かす

Posted at

docker+gvisor上でkeycloakを動かす

gviosr上でdockerを使いセキュアな状態でkeycloakを運用してみよう。(目標)

gvisorはなにがいいのか?

ぐぐるとだいたい同じような情報があるけど、ちょっとセキュアにコンテナを使えるようになるよ。くらいでいいかも。

やったこと

  1. 準備/前提
  2. docker-ceを入れる
  3. gvisorを入れる
  4. git-hubのkeycloak dockerイメージを動かなかった
  5. dockerのdebianイメージにkeacloakいれて設定かえて動かしてみる

得た知見

  • git-hubのjboss/keycloakだとgvisor上ではオプションでIPアドレスの変更などができないので無理
  • gvisorのコンテナはexec -it bashみたいなので入れないのでちょっと困ると辛い

準備/前提

ダウンロードするものとかは~/gvisor/ディレクトリを使用する

~$ mkdir gvisor
~$ cd gvisor/
~/gvisor$ 

docker-ceインストール

dockerのコミュニティバージョンであるdocker-ceをインストールする。

パッケージをダウンロード

~/gvisor$ wget https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/docker-ce_18
.03.1~ce-0~debian_amd64.deb

パッケージをdpkgでインストール

~/gvisor$ sudo dpkg -i docker-ce_18.03.1~ce-0~debian_amd64.deb 

動作チェック

~/gvisor$ sudo docker run hello-world

gvisorを入れる

gvisorのナイトリービルドをインストールする

ダウンロードとhash確認

~/gvisor$ wget https://storage.googleapis.com/gvisor/releases/nightly/latest/runsc
~/gvisor$ wget https://storage.googleapis.com/gvisor/releases/nightly/latest/runsc.sha512
~/gvisor$ sha512sum -c runsc.sha512

権限変更と配置

~/gvisor$ chmod +x runsc
~/gvisor$ sudo mv runsc /usr/local/bin

dockerの設定変更と反映

$ sudo sh -c 'cat <<EOF > /etc/docker/daemon.json
> {
>     "runtimes": {
>         "runsc": {
>             "path": "/usr/local/bin/runsc"
>         }
>     }
> }
> EOF'
~/gvisor$ sudo systemctl restart docker

動作確認

~/gvisor$ sudo docker run --runtime=runsc hello-world
  1. git-hubのkeycloak dockerイメージを動かしてみる
$ sudo docker run -d -p 18080:8080 \
             -e KEYCLOAK_USER=admin \
             -e KEYCLOAK_PASSWORD=admin \
             --name keycloak \
             --runtime=runsc \
             jboss/keycloak

Unable to find image 'jboss/keycloak:latest' locally
latest: Pulling from jboss/keycloak
469cfcc7a4b3: Pull complete 
05677e4d61f0: Pull complete 
a9520f492457: Pull complete 
4d201219d6b1: Pull complete 
1835cd4c1a3f: Pull complete 
7714303c1354: Pull complete 
0cb1390f3098: Pull complete 
7a8e832639e4: Pull complete 
35edde27ea33: Pull complete 
d81d932b7a26: Pull complete 
c0ca17cacfd1: Pull complete 
7251b61e0d72: Pull complete 
dbc3b0e37cdb: Pull complete 
af694ff5dee0: Pull complete 
527e34c6e8c1: Pull complete 
57af359e5590: Pull complete 
b772d54dd32d: Pull complete 
12664afee115: Pull complete 
Digest: sha256:a2d07439f3acc50c6ab2464a5b802c59d26c7e5cd4b354a763fdac877ed7e265
Status: Downloaded newer image for jboss/keycloak:latest
eda8ffa5d2fc5a446681efee2d9f4d81b3908926cace44ab409f6250cf663c29
# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS            PORTS        NAMES

おらんぞ?
落ちたっぽいのでログの確認

$ docker-logs keycloak

以下当該部分っぽいとこ

15:59:28,547 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service org.wildfly.network.interface.management: org.jboss.msc.service.StartException in service 

org.wildfly.network.interface.management: WFLYSRV0082: failed to resolve interface management
        at org.jboss.as.server.services.net.NetworkInterfaceService.start(NetworkInterfaceService.java:96) [wildfly-server-3.0.8.Final.jar:3.0.8.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:2032) [jboss-msc-1.2.7.SP1.jar:1.2.7.SP1]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1955) [jboss-msc-1.2.7.SP1.jar:1.2.7.SP1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_161]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_161]
       at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_161]

IPが割りあてられてないような気がする。

いろいろ確認し辛いので1から入れてみる。

dockerのdebianイメージにkeacloakいれて設定かえて動かしてみる

docker+gvisorでDebian入れる

yasuo@kohei:~/gvisor$ sudo docker run --runtime=runsc -it debian /bin/bash

普通にkeycloakインストール
jdkインストール

root@ea30d21c1301:/# apt install openjdk-8-jdk

wgetもないのでインストール

root@ea30d21c1301:/# apt install wget

keycloakをダウンロード

root@ea30d21c1301:/# wget https://downloads.jboss.org/keycloak/4.1.0.Final/keycloak-4.1.0.Final.tar.gz

keycloakの解答

root@ea30d21c1301:/# tar xvfz keycloak-4.1.0.Final.tar.gz 

keycloakの配置

root@ea30d21c1301:/# mv keycloak-4.1.0.Final /opt/keycloak

いざ起動

root@ea30d21c1301:/# cd /opt/keycloak/    
root@ea30d21c1301:/opt/keycloak# ./bin/standalone.sh 

やっぱエラーが出る

14:52:01,263 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001: Failed to start

 service org.wildfly.network.interface.management: org.jboss.msc.service.StartException in service 

org.wildfly.network.interface.management: WFLYSRV0082: failed to resolve interface management
        at org.jboss.as.server.services.net.NetworkInterfaceService.start(NetworkInterfaceService.j

ava:96) [wildfly-server-3.0.8.Final.jar:3.0.8.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:2032) [jboss-msc-1.2.7.SP1.jar:1.2.7.SP1]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1955) [jboss-msc-1.2.7.SP1.jar:1.2.7.SP1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_171]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_171]
        at java.lang.Thread.run(Thread.java:748) [rt.jar:1.8.0_171]

ネットワークまわりっぽいのでデフォルトの127.0.0.1から実際に割りあてられてるアドレスに変更してみる。

NAMESを確認して、、、

$ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ea30d21c1301        debian              "/bin/bash"         3 hours ago         Up 9 minutes                           admiring_bardeen

IPアドレスを確認する

$ sudo docker inspect -format="{{ .NetworkSettings.IPAddress }}" admiring_bardeenormat=172.17.0.2

これをjboss.bind.address.managementの箇所に投入してみる

root@ea30d21c1301:/opt/keycloak/standalone/configuration# diff -u standalone.xml~ standalone.xml
--- standalone.xml~     2018-07-12 16:52:50.134945210 +0000
+++ standalone.xml      2018-07-12 16:54:18.970861521 +0000
@@ -552,10 +552,10 @@
     </profile>
     <interfaces>
         <interface name="management">
-            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
+            <inet-address value="${jboss.bind.address.management:172.17.0.2}"/>
         </interface>
         <interface name="public">
-            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
+            <inet-address value="${jboss.bind.address:172.17.0.2}"/>
         </interface>
     </interfaces>
     <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
root@ea30d21c1301:/opt/keycloak# ./bin/standalone.sh 

動いた。
ホストのブラウザから
http://172.17.0.2:8080/auth/
とかしたらとりあえずログイン画面は見えた。

気が向いたら続く

gvisorでテスト済みとされてるアプリケーションとかがどんなテストしたのか情報が欲しい。。。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?