热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:DockertraefikV2.1

一、概念

一、概念

技术图片

 

 

 traefik 是一个开源的反向代理服务器,用go语言编写,原生支持Docker、Kubernets、File等,协议支持http、https、tcp、grpc等

下面是我使用traefik在docker中的一些实践,traefik 2.1 && docker 18.06.3-ce

 

二、部署


1、简单例子


version: 3
services:
traefik:
image: traefik:v2.
1
container_name: traefik
# 启用Web UI并监听docker
command:
--api.insecure=true --providers.docker
ports:
# HTTP 端口
- "80:80"
# Web UI 端口
- "8080:8080"
volumes:
# 这样Traefik可以监听Docker事件
- /var/run/docker.sock:/var/run/docker.sock
whoami:
# 公开API以显示其IP地址的容器
image: containous
/whoami
container_name: whoami
     # traefik 通过labels 来生成配置文件,这里的“whoami”可以是自定义名称,“whoami.fanxp.com” 是你域名
labels:
- "traefik.http.routers.whoami.rule=Host(`whoami.fanxp.com`)"

执行:docker-compose -f ./traefik-compose.yml up -d

如果是局域网测试 需要修改host 

192.168.1.221 whoami.fanxp.com

访问:http://whoami.fanxp.com:8080/

技术图片

 访问:http://whoami.fanxp.com/

技术图片

 这个简单的例子就完成了。

进入traefike web ui 中的http 可以看到请求过程

技术图片

Entrypoints -> 入口

HTTP Router -> 路由规则

Service -> 可以理解为部署在docker中的容器、这里也可以是在配置文件中自定义的service

TLS -> https

Middlewares - > 中间件(1.x中的很多功能都移到了这里面)

 

2、toml手动配置、https、自定义Router,Service

traefik.toml

# 全局配置
[global]
checkNewVersion
= false
sendAnonymousUsage
= false
# 入口
[entryPoints]
# http
[entryPoints.web]
address
= ":80"
# https
"websecure"这个名字是自己定义的
[entryPoints.websecure]
address
= ":443"
# traefik web ui
[entryPoints.traefik]
address
= ":8080"
# 免费Let‘s Encrypt 证书(注意:必须域名解析到的主机中才有效,traefik会把秘钥写入acme.json中)
[certificatesResolvers.bxtlschallenge.acme]
# 自己的邮箱地址
email
= "604694379@qq.com"
# 秘钥写入地址,根据自己文件映射来配置
storage
= "/letsencrypt/acme.json"
[certificatesResolvers.bxtlschallenge.acme.httpChallenge]
entryPoint
= "web"
# 自定义Router、Services(貌似必须定义在外部文件里面,坑了好久)
[providers.file]
directory
= "/etc/traefik/conf"
# traefik 需要开启的功能
[api]
insecure
= true
dashboard
= true
[ping]
[providers.docker]
endpoint
= "unix:///var/run/docker.sock"
exposedByDefault
= true
# 传输配置
[serversTransport]
# 如果后端需要代理https自定义证书,可以使用这种方式就可以跳过验证,不然会报x509证书错误
insecureSkipVerify
= true

 file.toml

[http]
# 自定义 routers
[http.routers]
# http 方式
[http.routers.routers-cnblogs]
entryPoints
= ["web"]
rule
= "Host(`cnblogs.fanxp.com`)"
service
= "cnblogs"
# https 方式
[http.routers.routers-cnblogs1]
entryPoints
= ["websecure"]
rule
= "Host(`cnblogs.fanxp.com`)"
service
= "cnblogs"
[http.routers.routers-cnblogs1.tls]
certResolver
= "bxtlschallenge"
# 自定义 services
[http.services]
[http.services.cnblogs]
# 可以设置多个url traefik 根据算法做负载均衡
[http.services.cnblogs.loadBalancer]
[[http.services.cnblogs.loadBalancer.servers]]
url
= "https://www.cnblogs.com/fanxp/"
[[http.services.cnblogs.loadBalancer.servers]]
url
= "https://github.com/fanxiaoping/grpc-test"

traefik-compose.yml

version: ‘3
services:
traefik:
image: traefik:v2
.1
container_name: traefik
ports:
# HTTP 端口
-
"80:80"
# HTTPS 端口
-
"443:443"
# Web UI 端口
-
"8080:8080"
volumes:
# 这样Traefik可以监听Docker事件
- /var/run/docker.sock:/var/run/docker.sock:ro
# 启动配置文件
- ./traefik.toml:/etc/traefik/traefik.toml
# 自定义routers、services
- ./conf:/etc/traefik/conf
# 存储证书秘钥
- ./letsencrypt:/letsencrypt
whoami:
# 公开API以显示其IP地址的容器
image: containous/whoami
container_name: whoami
labels:
# 地址:whoami.fanxp.com
-
"traefik.http.routers.whoami.rule=Host(`whoami.fanxp.com`)"
# 入口方式,这里采用https
-
"traefik.http.routers.whoami.entrypoints=websecure"
# 指定证书
-
"traefik.http.routers.whoami.tls.certresolver=bxtlschallenge"
whoami2:
# 公开API以显示其IP地址的容器
image: containous/whoami
container_name: whoami2
labels:
# 地址:whoami.fanxp.com/v2
-
"traefik.http.routers.whoami2.rule=Host(`whoami.fanxp.com`) && PathPrefix(`/v2`)"
# 默认代理使用http://
172.0.0.4 配置方式用https://172.0.0.4
# -
"traefik.http.services.bx_resource_library.loadbalancer.server.scheme=https"
# 定义中间件 规则
-
"traefik.http.routers.whoami2.middlewares=whoami2-stripprefix"
# 代理:
172.0.0.4/v2访问,这肯定不是我们想要的 写上规则后 代理:172.0.0.4
-
"traefik.http.middlewares.whoami2-stripprefix.stripprefix.prefixes=/v2"
# 如果容器有多个端口 可以指定当前service暴露哪一个端口,默认第一个
-
"traefik.http.services.whoami2.loadbalancer.server.port=80"
# 入口方式,这里采用https
-
"traefik.http.routers.whoami2.entrypoints=websecure"
# 指定证书
-
"traefik.http.routers.whoami2.tls.certresolver=bxtlschallenge"

执行以后访问:

https://whoami.fanxp.com

https://whoami.fanxp.com/v2

http://cnblogs.fanxp.com

https://cnblogs.fanxp.com

所有文件配置信息:https://github.com/fanxiaoping/traefik2.1-config 


推荐阅读
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
author-avatar
红星闪闪的电灯泡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有