使用Docker Swarm部署Keycloak

时间:2020-03-21 11:42:20  来源:igfitidea点击:

我们将使用Docker Swarm部署Keycloak。

我们将在CentOS 7上安装Docker Swarm并为Keycloak创建一个堆栈。
请注意,本文不介绍Keycloak的配置。

安装Docker引擎

在所有节点上运行以下命令。

安装软件包:

# yum install -y yum-utils

添加Docker存储库:

# yum-config-manager --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

安装Docker:

# yum install docker-ce docker-ce-cli containerd.io

启用并启动服务:

# systemctl enable docker && systemctl start docker

配置防火墙

在所有节点之间打开以下端口:

  • 用于群集管理通信的TCP端口2377.
  • TCP和UDP端口7946,用于节点之间的通信。
  • UDP端口4789,用于覆盖网络流量。

iptables配置代码段:

-A INPUT -s 10.11.1.0/24 -p tcp -m multiport --dports 2377,7946 -j ACCEPT
-A INPUT -s 10.11.1.0/24 -p udp -m multiport --dports 4789,7946 -j ACCEPT

创建一个群体

在主节点上,初始化群集:

# docker swarm init --advertise-addr 10.11.1.80
Swarm initialized: current node (uglx1edsgztziitrlg2uwuls2) is now a manager.
To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN...juf 10.11.1.80:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

将工人添加到群中

将其他两个服务器添加为工作节点:

# docker swarm join --token SWMTKN...juf 10.11.1.80:2377

验证群

# docker info
# docker node ls

部署Portainer代理(可选)

这部分是可选的。
我发现Portainer很有用。

文件“ compose.yml”的内容可以在下面看到。

services:
  agent:

image: portainer/agent:latest

ports:

- "9001:9001/tcp"

volumes:

- /var/run/docker.sock:/var/run/docker.sock

- /var/lib/docker/volumes:/var/lib/docker/volumes
version: '3.8'

部署新的堆栈:

# docker stack deploy --compose-file compose.yml portainer

部署密钥斗篷

请注意,创建专用网络很有用,但不是必需的。
创建一个新的网络:

# docker network create --attachable --driver overlay --gateway 10.55.254.1 --subnet 10.55.254.0/24 --scope swarm --label keycloak_net --internal keycloak_net

文件“ kc-compose.yml”的内容如下所示。

version: '3.8'
services:
  keycloak:

image: jboss/keycloak:11.0.0

environment:

KEYCLOAK_USER: admin

KEYCLOAK_PASSWORD: changeme

KEYCLOAK_HTTP_PORT: 8080

KEYCLOAK_HTTPS_PORT: 8443

KEYCLOAK_LOGLEVEL: INFO

DB_VENDOR: mysql

DB_ADDR: database.igi.local

DB_PORT: 3306

DB_DATABASE: keycloak_swarm

DB_USER: keycloak_swarm

DB_PASSWORD: changeme

networks:

- keycloak_net

ports:

- "8080:8080/tcp"

- "8443:8443/tcp"

restart: unless-stopped

volumes:

- "/etc/hosts:/etc/hosts" ## poor man's DNS

- "/opt/keycloak/certs/:/etc/x509/https" ## map certificates to container

deploy:

mode: replicated

replicas: 1

placement:

max_replicas_per_node: 1

constraints:

- node.role==worker

resources:

limits:

cpus: '1.50'

memory: 1024M

reservations:

cpus: '0.05'

memory: 128M
networks:
  keycloak_net:

external: true

从单个副本开始。

Keycloak镜像允许我们同时指定私钥和用于提供HTTPS服务的证书。
目录“/opt/keycloak/certs /”包含两个文件:“ tls.crt”和“ tls.key”。
根据文档,这些文件需要挂载在“/etc/x509/https”目录中。
如果我们不使用/不需要HTTPS,请注释掉这些行。

部署新的堆栈:

# docker stack deploy --compose-file kc-compose.yml keycloak

检查服务日志:

# docker service logs -f keycloak_keycloak

列出服务:

# docker service ls
ID

NAME

MODE

REPLICAS

IMAGE

PORTS
pwu4krhlcqkq

keycloak_keycloak   replicated

1/1 (max 1 per node)   jboss/keycloak:11.0.0    *:8080->8080/tcp, *:8443->8443/tcp
qoywxieiy53h

portainer_agent     replicated

1/1

portainer/agent:latest   *:9001->9001/tcp