使用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