【实战】k8s集群中通过docker容器部署Squid正向代理

2023-11-02

1. Squid简介

   Squid Cache(简称为Squid)是HTTP代理服务器软件。Squid用途广泛,可以作为缓存服务器,可以过滤流量帮助网络安全,也可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。Squid的主要作用和应用场景有:

  • 用来做前置的Web缓存,加快用户访问Web的速度
  • 代理内网用户访问互联网资源
  • 设置访问控制策略,控制用户的上网行为
  • 主要支持http、ftp等应用协议

参考: https://hub.docker.com/r/sameersbn/squidhttps://www.cnblogs.com/ssgeek/p/12302135.html

2. 问题描述

   通常公司内部服务器只有指定的节点具备出网权限,当其他节点需要访问公网时,需要通过该节点代理上网。步骤如下:

  • 在公网节点上容器化部署Squid,提供HTTP正向代理
  • 在其它节点上配置docker代理

3. k8s集群中容器化部署Squid

3.1 环境说明

   本文中涉及三台服务器,仅有master节点具有公网访问能力(也可指定为其它节点)。

角色 私网IP 公网IP
k8s-master 172.18.25.81 8.135.19.91
k8s-node1 172.18.25.82
k8s-node2 172.18.25.83

3.2 在公网节点使用docker安装squid

使用docker安装squid

  • 从docker hub下载容器

    docker pull sameersbn/squid:3.5.27-2
    
  • 在docker中创建容器

    docker run --name squid -d --restart=always \
      --publish 3128:3128 \
      --volume /srv/docker/squid/cache:/var/spool/squid \
      sameersbn/squid:3.5.27-2
    

3.3 配置受信

  • 安装htpasswd

    yum install httpd-tools
    
  • 生成认证文件

    # squid_passwd为认证文件名,squid为账号名
    
    htpasswd -c squid_passwd squid
    # 这里输入两次密码:123456
    
  • 将认证文件拷贝至容器

    docker cp squid_passwd squid:/etc/squid/
    

3.4 修改Squid配置文件

配置squid

  • 从Squid容器中导出默认配置文件

    docker cp squid:/etc/squid/squid.conf ./
    
  • 去掉注释

    awk '/^[^#]/' squid.conf > squid-simple.conf
    
  • 编辑配置文件

    vim squid-simple.conf
    
  • 添加以下三行至“http_access deny all”上面(因为过滤规则是从上至下的)

    auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid_passwd
    acl ncsa_users proxy_auth REQUIRED
    http_access allow ncsa_users
    
  • 将配置文件导入Squid容器

    docker cp squid-simple.conf squid:/etc/squid/squid.conf
    
  • 重启docker

    docker restart squid
    
  • 附上完整配置文件:squid.conf

    acl SSL_ports port 443
    acl Safe_ports port 80          # http
    acl Safe_ports port 21          # ftp
    acl Safe_ports port 443         # https
    acl Safe_ports port 70          # gopher
    acl Safe_ports port 210         # wais
    acl Safe_ports port 1025-65535  # unregistered ports
    acl Safe_ports port 280         # http-mgmt
    acl Safe_ports port 488         # gss-http
    acl Safe_ports port 591         # filemaker
    acl Safe_ports port 777         # multiling http
    acl CONNECT method CONNECT
    auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/squid_passwd
    acl ncsa_users proxy_auth REQUIRED
    http_access allow ncsa_users
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow localhost manager
    http_access deny manager
    http_access allow localhost
    http_access deny all
    http_port 3128
    coredump_dir /var/spool/squid
    refresh_pattern ^ftp:           1440    20%     10080
    refresh_pattern ^gopher:        1440    0%      1440
    refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
    refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
    refresh_pattern .               0       20%     4320
    

4. 代理上网

4.1 为其它节点上的docker配置代理

配置docker代理

  • 环境配置,格式:http://{帐号名}:{密码}@{公网节点的私网IP}:3128

    # mkdir -p /etc/systemd/system/docker.service.d
    # vim /etc/systemd/system/docker.service.d/http-proxy.conf
    
    [Service]
    Environment="HTTP_PROXY=http://squid:123456@172.18.25.81:3128" "HTTPS_PROXY=http://squid:123456@172.18.25.81:3128" "NO_PROXY="
    
  • 使配置生效并重启docker

    systemctl daemon-reload &&
    systemctl restart docker
    
  • 拉取镜像验证

    docker pull busybox:latest
    

4.2 为k8s集群中的pod配置代理

  • 在Deployment中加上env配置
apiVersion: apps/v1
kind: Deployment
metadata:
  name: 
  labels:
    app: 
spec:
  selector:
    matchLabels:
      app: 
  replicas: 
  template:
    metadata:
      name: 
      labels:
        app: 
    spec:
      containers:
        - name: 
          image: 
          imagePullPolicy: 
          ports:
            - containerPort: 
          env:
          - name: http_proxy
            value: http://squid:123456@172.18.25.81:3128
          - name: https_proxy
            value: http://squid:123456@172.18.25.81:3128

5. 总结

水平有限,一些细节、问题没有考虑到;此外,部署方式还可以加以改进:

  • 公网节点的squid部署可采用声明式部署的方式
  • 其它节点的代理可在搭建集群时统一预先配置
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【实战】k8s集群中通过docker容器部署Squid正向代理 的相关文章

随机推荐

  • 利用Vulnhub复现漏洞 - Jenkins远程命令执行漏洞(CVE-2018-1000861)

    Jenkins远程命令执行漏洞 CVE 2018 1000861 Vulnhub官方复现教程 漏洞原理 复现过程 启动环境 漏洞复现 POC 检验 Vulnhub官方复现教程 https vulhub org environments je
  • idea修改 项目代码,浏览器页面不生效 解决方案

    使用快捷键ctrl shift delete 清理浏览器缓存 1 问题描述 idea修改前端项目代码 运行谷歌浏览器不起作用 我也试过 rebuild project 重启idea 等方法都不管用 再次运行谷歌浏览器 还是没有变化 2 尝试
  • “震撼你的前端技能:完整的前端面试指南”

    HTML基础 1 HTML 文件中的 DOCTYPE 是什么作用 HTML超文本标记语言 是一个标记语言 就有对应的语法标准 DOCTYPE 即 Document Type 网页文件的文档类型标准 主要作用是告诉浏览器的解析器要使用哪种 H
  • 八.AD域中启用用户和禁用用户

    c LDAP代码实现启用账户或禁用账户 这个功能单独拿出来写的原因可以猜猜 region 启用用户或禁用用户
  • Cesium Token申请

    一 什么是Cesium ion Cesium ion是一个提供瓦片图和3D地理空间数据的平台 支持把数据添加到用户自己的应用程序中 二 为什么需要access token 使用Cesium ion需要申请access token 当用户将数
  • How To Reload the SYS.DBMS_STATS Package (文档 ID 1310365.1)

    APPLIES TO Oracle Server Enterprise Edition Version 9 2 0 1 to 11 2 0 2 Release 9 2 to 11 2 Information in this document
  • springmvc+sitemesh2+freemarker整合

    1 背景 最近在搭建自己的springmvc sitemesh2 freemarker框架时 遇到了一个问题 就是sitemesh2整合springmvc时 springmvc没有正确的渲染sitemesh2的模板页面 在一番百度之后 发现
  • Springboot +tk.mybatis+generator 自动生成Mapper xml 插件配置及 常见 错误 MapperException 、BaseSelectProvider

    1 新建sprintboot项目 先把需要的 选项勾选上 如Mysql jdbc web mybatis 等你需要的 这是第一步 如果你需要配置tk mybatis 你需要额外的导入 新的jar包 以及 pom xml 的 build 中p
  • mybatis 注解传入 list 集合

    这里写一个查询的sql语句 第一种方式 首先看 mapper SelectProvider type SqlModel class method listDeviceIndex Results value Result column ind
  • Python 设计模式 - 适配器模式

    精通Python设计模式第二版 第 4 章 适配器模式 学习笔记 适配器模式 适配器模式是一种结构型设计模式 能帮助我们使两个不兼容的接口兼容 假设我们想使用function a 作为接口 但是只有function b 则可以使用适配器将f
  • 理解全虚拟、半虚拟以及硬件辅助的虚拟化

    接触过的一些搞了几年云计算的童鞋 也没明白常见的几种虚拟机技术方案的异同 比如只是记住了半虚拟要在虚拟机装驱动而全虚拟不需要 也不知道有时候为什么需要打开BIOS里的VT项 本人呢 在看了各种讲解虚拟化的书籍之后 有些概念虽然不是很清晰 但
  • HashPasswordForStoringInConfigFile 已过时

    https blog csdn net ibenxiaohai123 article details 77453340 https docs microsoft com en us dotnet api system security cr
  • 【ES6】对象的扩展

    文章目录 一 对象的扩展 二 用法详解 1 属性的简洁表示 2 属性名表达式 3 Object is 4 扩展运算符与Object assign 5 in 6 对象的遍历方式 一 对象的扩展 属性的简洁表示法 属性名表达式 Object i
  • Qt-初识

    文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 一 是什么 Qt是一个由Qt Company开发的跨平台C 图形用户界面应用程序开发框架 它既可以开发GUI程序 也可用于开发非GUI程序 比如控制台工具
  • MATLAB 2018中LSTM时间序列分类

    从MATLAB2018a开始 增加了LSTM神经网络工具箱 上图将时序数据分类为categorical 0 或categorical 1 每一行代码解释如下 该时序数据每一个时刻都是一个11维的列向量 隐藏层节点为270 分为两类0或1 构
  • Ciclop horus源码编译

    1 简介 Ciclop是西班牙BQ公司开源的一个DIY 3D扫描仪Horus则是配套开发的3D扫描软件 这款Ciclop是完全开源的 该公司甚至把有关这台3D扫描仪的所有相关机械设计 电子 软件 算法 数学和进行的测试都公布在了开源社区上
  • mysql 参数单位_MySQL参数配置

    参数名称 参数说明 缺省值 最低版本要求 user 数据库用户名 用于连接数据库 所有版本 passWord 用户密码 用于连接数据库 所有版本 useUnicode 是否使用Unicode字符集 如果参数characterEncoding
  • 数据结构学习系列之顺序表的两种删除方式

    方式1 在顺序表的末端删除所存储的数据元素 代码如下 示例代码 int delete seq list 1 list t seq list if NULL seq list printf 入参为NULL n return 1 if 0 se
  • WEB端测试点----整理

    目录 1 功能测试 1 1链接测试 1 2表单测试 1 3数据校验 1 4 cookies测试 1 5数据库测试
  • 【实战】k8s集群中通过docker容器部署Squid正向代理

    1 Squid简介 2 问题描述 3 k8s集群中容器化部署Squid 3 1 环境说明 3 2 在公网节点使用docker安装squid 3 3 配置受信 3 4 修改Squid配置文件 4 代理上网 4 1 为其它节点上的docker配