日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

能更好集成容器的反向代理工具Traefik的簡單使用

來源: 責編: 時間:2024-04-02 17:22:37 159觀看
導讀需求WebAPI 接口中有兩大類業務,當然根據具體情況可以是若干類。例如:workflow 和 interface,分別代表流程平臺和接口平臺。在集群部署模式下,可以根據不同的路由分配到不同的節點。例如:一共部署了 10 個節點,workflow 分

lFP28資訊網——每日最新資訊28at.com

需求

WebAPI 接口中有兩大類業務,當然根據具體情況可以是若干類。例如:workflow 和 interface,分別代表流程平臺和接口平臺。lFP28資訊網——每日最新資訊28at.com

在集群部署模式下,可以根據不同的路由分配到不同的節點。例如:一共部署了 10 個節點,workflow 分布式到其中的 3 個節點,interface 分布式到其余的 7 個節點。lFP28資訊網——每日最新資訊28at.com

這種方式的好處就是對于只有單一技術棧的團隊,在物理上可以將代碼組織在一起,方便維護,但在邏輯上可以將不同的業務分開,實現動態擴展和彈性。lFP28資訊網——每日最新資訊28at.com

當然上面的需求使用 nginx 也可以很容易做到,但本文采用的是 Tr?f?k ,先來看看 Tr?f?k 和 nginx 的區別。lFP28資訊網——每日最新資訊28at.com

Traefik 和 Nginx 的區別

Traefik 和 Nginx 都是反向代理工具,但它們在設計和使用場景上存在一些區別。下面簡要比較一下這兩者:lFP28資訊網——每日最新資訊28at.com

  • Traefik 可以無須重啟即可更新配置,Nginx 據說能做到(沒有驗證過)。
  • Traefik 可以自動的服務發現與負載均衡,Nginx 需要借助一些第三方工具。
  • Traefik 對  Docker、Kubernetes、Swarm 的支持更好。
  • Traefik 有漂亮的 dashboard 界面。
  • Traefik 在功能上沒有 Nginx 豐富,網上資料、案例也比 Nginx 少。
  • Traefik 性能比 Nginx 要差,但具體差別多大,還未驗證。

環境

  • Traefik:v3.0.0-rc2
  • 操作系統:macOS13.0
  • Docker:20.10.13

Traefik 簡單示例

Traefik 使用 docker-compose 進行部署,部署前先創建一個 docker 網絡:lFP28資訊網——每日最新資訊28at.com

docker network create traefik-net

創建一個 traefik-demo 的目錄,目錄中創建 docker-compose.yml 文件,用來構建一個 Traefik 容器。lFP28資訊網——每日最新資訊28at.com

version: "3"services:  traefik:    image: traefik:v3.0.0-rc2    restart: always    ports:      - 80:80    volumes:      - /var/run/docker.sock:/var/run/docker.sock    command:       - "--api=true"      - "--api.dashboard=true"      - "--api.insecure=true"      - "--entrypoints.http.address=:80"      - "--providers.docker=true"    labels:      - "traefik.http.routers.traefik-dashboard.entrypoints=http"      - "traefik.http.routers.traefik-dashboard.rule=Host(`traefik.fw.com`)"      - "traefik.http.routers.traefik-dashboard.service=dashboard@internal"      - "traefik.http.routers.traefik-dashboard-api.entrypoints=http"      - "traefik.http.routers.traefik-dashboard-api.rule=Host(`traefik.fw.com`) && PathPrefix(`/api`)"      - "traefik.http.routers.traefik-dashboard-api.service=api@internal"    networks:      - traefik-net      networks:  traefik-net:    external: true    name: traefik-net
  • /var/run/docker.sock:/var/run/docker.sock:允許 Traefik 訪問 Docker 守護進程,用于自動發現 Docker 服務,允許 Traefik 訂閱 Docker 服務事件,來動態的添加或刪除要對用戶暴露的網絡服務。
  • --api=true:啟用 Traefik API。
  • --api.dashboard=true:啟用 Traefik 的 Web UI。
  • --api.insecure=true:允許不安全的 API 和 Web UI 訪問。
  • --entrypoints.http.address=:80:設置 HTTP 入口點在容器的 80 端口。
  • --providers.docker=true:啟用 Docker 作為服務提供者。

通過在 Docker Labels 中添加了聲明式的路由,分別將 Dashboard 的網頁(路由名稱  traefik-dashboard )和 API (路由名稱 traefik-dashboard-api )注冊在了我們創建的 http 網絡入口上,用戶就可以通過我們設置的域名來訪問服務了。lFP28資訊網——每日最新資訊28at.com

  • traefik.http.routers.traefik-dashboard.entrypoints=http: 為 Traefik dashboard 設置入口點。
  • traefik.http.routers.traefik-dashboard.rule=Host(traefik.fw.com):設置訪問 Traefik dashboard 的主機規則。
  • traefik.http.routers.traefik-dashboard.service=dashboard@internal:指定 Traefik dashboard 使用內部服務。
  • traefik.http.routers.traefik-dashboard-api.entrypoints=http:為 Traefik API 設置入口點。
  • traefik.http.routers.traefik-dashboard-api.rule=Host(traefik.fw.com) && PathPrefix(/api):設置訪問 Traefik API 的主機和路徑前綴規則。
  • traefik.http.routers.traefik-dashboard-api.service=api@internal:指定 Traefik API 使用內部服務。

上面的配置中有一個域名:traefik.fw.com ,這是我本地測試使用的域名,正式環境替換為真實域名即可。本地測試可以通過修改 hosts 文件的方式:lFP28資訊網——每日最新資訊28at.com

cd /etc/sudo chmod 777 hostsvi hosts

添加映射:lFP28資訊網——每日最新資訊28at.com

127.0.0.1 traefik.fw.com

在 traefik-demo 目中中執行 docker-compose up -d traefik 來構建 Traefik 服務,執行成功后,在瀏覽器中訪問:traefik.fw.com ,可以看到如下界面:lFP28資訊網——每日最新資訊28at.com

lFP28資訊網——每日最新資訊28at.com

可以看到 Services 有 10 個,其中包含了我本機上部署的其他的 docker 容器。lFP28資訊網——每日最新資訊28at.com

使用官方的測試容器來進行測試,修改 docker-compose.yml 文件,在下面添加如下內容:lFP28資訊網——每日最新資訊28at.com

whoami:    image: containous/whoami        labels:      - "traefik.enable=true"      - "traefik.http.routers.whoami.rule=Host(`whoami.fw.com`)"      - "traefik.http.services.whoami.loadbalancer.server.port=80"    networks:      - traefik-net

執行 docker-compose up -d whoami 進行構建,構建成功后,命令行執行:curl -H Host:whoami.fw.com http://127.0.0.1。lFP28資訊網——每日最新資訊28at.com

lFP28資訊網——每日最新資訊28at.com

現在使用命令:docker-compose up -d --scale whoami=2 對 whoami 服務進行擴容,創建成功后,再使用:curl -H Host:whoami.fw.com http://127.0.0.1 進行測試,會發現已經在兩個容器間進行負載了:lFP28資訊網——每日最新資訊28at.com

lFP28資訊網——每日最新資訊28at.com

使用 WebAPI 示例進行驗證

使用 C# 編寫 WebAPI 接口,創建兩個 Controller 模擬兩個不同的業務,InterfaceCenterController 和 WorkflowController ,代碼如下:lFP28資訊網——每日最新資訊28at.com

[ApiController]    [Route("[controller]")]    public class WorkflowController : ControllerBase    {        [HttpGet()]        public string Test()        {            string ip = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" +                         Request.HttpContext.Connection.LocalPort.ToString();            return $"workflow server,{ip}";        }    }        [ApiController]    [Route("[controller]")]    public class InterfaceCenterController : ControllerBase    {        [HttpGet()]        public string Test()        {             string ip = Request.HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString() + ":" +                      Request.HttpContext.Connection.LocalPort.ToString();            return $"interfaceCenter server,{ip}";        }    }

代碼寫好后,進行發布,在發布目錄中創建 Dockerfile 文件,內容如下:lFP28資訊網——每日最新資訊28at.com

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1COPY . /appWORKDIR /appEXPOSE 80/tcpENTRYPOINT ["dotnet", "ApiDemo.dll"]

執行下面命令進行鏡像構建:lFP28資訊網——每日最新資訊28at.com

docker build -t apidemo .

修改 traefik-demo 目錄中的 docker-compose.yml 文件,在下面添加如下內容:lFP28資訊網——每日最新資訊28at.com

apidemo:    image: apidemo     labels:      - "traefik.enable=true"      - "traefik.http.routers.apidemo.entrypoints=http"      - "traefik.http.routers.apidemo.rule=Host(`apidemo.fw.com`)  && PathPrefix(`/workflow`)"      - "traefik.http.services.apidemo.loadbalancer.server.port=80"    networks:      - traefik-net  apidemo-1:    image: apidemo     labels:      - "traefik.enable=true"      - "traefik.http.routers.apidemo-1.entrypoints=http"      - "traefik.http.routers.apidemo-1.rule=Host(`apidemo.fw.com`) && PathPrefix(`/interfacecenter`)"      - "traefik.http.services.apidemo-1.loadbalancer.server.port=80"    networks:      - traefik-net
  • 在 apidemo 中配置了路由 PathPrefix(/workflow) 表示只接受工作流平臺的業務。
  • 在 apidemo-1 中配置了路由 PathPrefix(/interfacecenter) 表示只接受接口平臺的業務。

在上面 labels 的路由配置中使用了 apidemo.fw.com 的域名,同樣,這個域名也需要配置到 hosts 文件中:lFP28資訊網——每日最新資訊28at.com

127.0.0.1 traefik.fw.com apidemo.fw.com

執行下面的命令進行容器的構建:lFP28資訊網——每日最新資訊28at.com

docker-compose up -d apidemodocker-compose up -d apidemo-1

使用 Postman 進行測試:lFP28資訊網——每日最新資訊28at.com

lFP28資訊網——每日最新資訊28at.com

lFP28資訊網——每日最新資訊28at.com

  • 當訪問 workflow 路由時,返回的容器 IP 一直都是 172.18.0.2。
  • 當訪問 interfacecenter 路由時,返回的容器 IP 一直都是 172.18.0.4。

本文鏈接:http://www.www897cc.com/showinfo-26-80876-0.html能更好集成容器的反向代理工具Traefik的簡單使用

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Node.js 紀錄片都講了什么?我做了這些關鍵時間線的總結!

下一篇: .NET字符串內存管理:常量字符串、動態創建和字符串池的巧妙結合

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 垣曲县| 沽源县| 泽州县| 闸北区| 花垣县| 鄢陵县| 凯里市| 灵寿县| 吉水县| 刚察县| 遂平县| 揭东县| 武城县| 舒兰市| 张家界市| 隆德县| 秭归县| 平罗县| 陵水| 板桥市| 来凤县| 昆明市| 鄂尔多斯市| 阿拉尔市| 东至县| 五峰| 石城县| 扶余县| 收藏| 嘉黎县| 北碚区| 固阳县| 托里县| 盐津县| 石家庄市| 顺昌县| 桦南县| 株洲市| 义乌市| 铅山县| 交城县|