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

DockertraefikV2.1

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

一、概念

Docker traefikV2.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/

Docker traefikV2.1

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

Docker traefikV2.1

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

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

Docker traefikV2.1

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 


推荐阅读
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
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社区 版权所有