portainer
添加Edge Endpoint,前提是portainer容器要暴露8000端口:3步骤里,添加的是portainer所在服务器地址,接着在需要被监控的服务器里安装portainer-agent然后配置需要被监控的服务器ip地址,然后更新终点信息...
一、Agent:
适用于集群控制,如swarm,kubernetes。
- 在manage端点运行命令(work端点无法运行),然后根据agent-stack这个文件,进行swarm集群环境下多个服务的编排,但其实也就部署了agent这一个服务
curl -L https://downloads.portainer.io/agent-stack.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack.yml portainer-agent
agent-stack文件内容:
version: '3.2'
services:
agent:
image: portainer/agent
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
ports:
- target: 9001
published: 9001
protocol: tcp
mode: host
networks:
- portainer_agent
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]networks:
portainer_agent:
driver: overlay
attachable: true
2.添加端点ip地址,将Portainer与agent建立通信。因为集群里的每台机器都安装了agent代理,所以这里的ip地址可以任填一个。
二、Edge Agent(边缘代理):
- portainer容器运行,同时需要暴露8000端口,方便Portainer通过端口8000与边缘代理进行通信
- 在被需要管理的端点上运行portainer-agent容器
- Portainer与边缘断点建立连接,进行通信
添加Edge Endpoint,前提是portainer容器要暴露8000端口:
3步骤里,添加的是portainer所在服务器地址,接着在需要被监控的服务器里安装portainer-agent
然后配置需要被监控的服务器ip地址,然后更新终点信息
三、Docker直连
直接与远程机器的docker api进行通信
1、编辑docker宿主机文件/lib/systemed/system/docker.service,修改ExecStart行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
2、Portainer通过指定端口连接远程docker API
总结:
- Agent适用于集群部署,包括swarm,kubernetes;
- Edge Agent和docker API区别在于Edge Agent是通过portainer agent代理的方式来与Portainer进行通信,而docker直连是直接与远程机器的Docker API进行通信
Edge Agent主要用于远程机器与Portainer实例不在同一网络中的情况,也就是说Edge Agent可以实现内网穿透,只需要在内网里的机器运行portainer-agent代理容器;而docker直连无法完成。 - 不推荐在生产环境中使用Docker API直接通信的方式,因为直接暴露端口的方式容易导致服务器被利用,例如进行挖矿。
github项目:Portainer/agent
Portainer agent技术细节
- 代理通过Unix socket / Windows命名管道与部署在其上的Docker节点进行通信,以检索有关节点的信息(名称、IP地址、集群中所扮演的角色)
- 为了将请求代理到集群内的其他代理,引入了一个名为“X-PortainerAgent-Target”的header,它可以使用集群中任何节点的名称作为值。当指定此头时,接收请求的Portainer代理将提取其值,检索使用此头值指定的节点上的代理的地址,并将请求代理给它。
如果header不存在,假设接收请求的代理是请求的目标,那么它将被代理到本地的Docker API。
有些请求被特别标记为针对集群内的manage节点执行,例如 /services/**,/tasks/**,/nodes/**,那么不管在集群中任何代理上执行这些请求,它们都会被代理到manage节点上。 - 代理最终的代理目标始终是Docker API,意味着将保持Docker的原始响应格式。该响应的唯一区别是,代理将使用Portainer-agent的版本作为值,自动将Portainer-agent header添加到每个响应。
Edge Agent技术细节
- 启动时,agent将访问Portainer实例,并负责创建一个反向隧道,允许Portainer查询。agent使用一个令牌(Edge key),该令牌包含连接到Portainer实例所需的信息。
- Edge key采用 base64编码并且包含以下信息:①Portainer instance API URL;②Portainer instance tunnel server address(隧道服务地址);③Portainer instance tunnel server fingerprint(隧道服务指纹);④Endpoint identifier(端点标识符)
格式如下:
例如Edge key:aHR0cDovLzE3Mi4zMS43My4xOTE6OTAwMHwxNzIuMzEuNzMuMTkxOjgwMDB8ZWM6ZDE6MjA6MzM6NWU6NDk6MDU6Zjc6NjU6Nzk6NTA6OWU6ZjU6NjY6Mzg6YTB8MTMportainer_instance_url | tunnel_server_addr | tunnel_server_fingerprint | endpoint_ID
解码之后为:
http://172.31.73.191:9000|172.31.73.191:8000|ec:d1:20:33:5e:49:05:f7:65:79:50:9e:f5:66:38:a0|13 - 当Edge key与Edge agent绑定后,agent将开始轮询Portainer实例。轮询请求的响应包含以下信息:隧道状态,轮询频率,隧道端口,加密证书,时间表。然后代理将使用响应中的隧道端口以及加密证书创建反向隧道。
更多推荐
所有评论(0)