OpenStack Yoga版安装笔记(七)glance练习补充

1、练习场景说明

 在OpenStack Yoga版安装笔记(五)中,glance已经在controller node虚拟机上安装完成,并且已经成功拍摄了快照。

此时,controller node虚机已经安装了keystone、keystone DB、glance、glance DB、OpenStackClient、memcache等软件:

将controller node虚机转到此快照然后开机,在这台虚机上执行openstack image list命令,观察OpenStack组件之间完整交互过程。

2、安装wireshark

controller node:

controller node root用户下执行:
apt update
apt install wiresharkroot@controller:~# wireshark --version
Wireshark 3.6.2 (Git v3.6.2 packaged as 3.6.2-2)Copyright 1998-2022 Gerald Combs <gerald@wireshark.org> and contributors.
License GPLv2+: GNU GPL version 2 or later <https://www.gnu.org/licenses/gpl-2.0.html>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Compiled (64-bit) using GCC 11.2.0, with Qt 5.15.2, with libpcap, with POSIX
capabilities (Linux), with libnl 3, with GLib 2.71.2, with zlib 1.2.11, with Lua
5.2.4, with GnuTLS 3.7.3 and PKCS #11 support, with Gcrypt 1.9.4, with MIT
Kerberos, with MaxMind DB resolver, with nghttp2 1.43.0, with brotli, with LZ4,
with Zstandard, with Snappy, with libxml2 2.9.12, with libsmi 0.4.8, with
QtMultimedia, without automatic updates, with SpeexDSP (using system library),
with Minizip.Running on Linux 5.15.0-113-generic, with Intel(R) Core(TM) i7-10710U CPU @
1.10GHz (with SSE4.2), with 7901 MB of physical memory, with GLib 2.72.4, with
zlib 1.2.11, with Qt 5.15.3, with libpcap 1.10.1 (with TPACKET_V3), with c-ares
1.18.1, with GnuTLS 3.7.3, with Gcrypt 1.9.4, with nghttp2 1.43.0, with brotli
1.0.9, with LZ4 1.9.3, with Zstandard 1.4.8, with libsmi 0.4.8, with
LC_TYPE=C.UTF-8, binary plugins supported (0 loaded).
root@controller:~# 

建议win11(10.0.20.1)电脑上下载MobaXterm,root登录controller node(10.0.20.11),执行wireshark。

controller node 安装完成后,关闭虚机,拍摄快照,方便回退。

3、OpenStack绑定不同IP地址

controller node上安装了OpenStack不同组件,比如:keystone、keystone DB、glance、glance DB、memcache等,为了方便查看不同组件交互,可以将他们分别绑定不同的IP。

3.1 ens33配置多个相同网段地址

# This is the network config written by 'subiquity'
network:ethernets:ens33:addresses:- 10.0.20.11/24   --> 规划给keyston- 10.0.20.17/24   --> 规划给database- 10.0.20.18/24   --> 规划给glance- 10.0.20.19/24   --> 规划给memcachenameservers:addresses:- 10.0.20.2search: []routes:- to: defaultvia: 10.0.20.2ens34:dhcp4: falseversion: 2
root@controller:~#netplan apply

3.2 配置/etc/hosts文件

root@controller:~# vi /etc/hosts
root@controller:~# cat /etc/hosts
127.0.0.1 localhost
# 127.0.1.1 os-1# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters10.0.20.11 controller
10.0.20.12 compute110.0.20.17 controller-db  <--新增
10.0.20.18 controller-glance <--新增
10.0.20.19 controller-memcached <--新增

3.3 database配置修改

root@controller:~# vi /etc/mysql/mariadb.conf.d/99-openstack.cnf 
root@controller:~# cat /etc/mysql/mariadb.conf.d/99-openstack.cnf 
[mysqld]
bind-address = 10.0.20.17   <--修改default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
root@controller:~#

3.4 memcache配置修改

root@controller:~# vi /etc/memcached.conf
...
-l 10.0.20.19   <--修改
...

3.5 keystone连接database信息修改

root@controller:~# vi /etc/keystone/keystone.conf [database]
# connection = sqlite:var/lib/keystone/keystone.dbconnection = mysql+pymysql://keystone:openstack@controller-db/keystone   <--修改

3.6 glance连接database信息修改

root@controller:~# vi /etc/glance/glance-api.conf
[database]
# connection = sqlite:var/lib/glance/glance.sqlite
connection = mysql+pymysql://glance:openstack@controller-db/glance  <--修改[keystone_authtoken]
memcached_servers = controller-memcached:11211   <---修改

3.7 修改db信息后,第一次重启controller node

root@controller:~#reboot

重启后,在controller node上使用openstackclient,检查keystone、glance连接db、memcached是否正常:

可以执行:
openstack user list
openstack image list (需要正常连接keystone db,keystone, glance,glance db,memcached才能正常显示)

3.8 修改glance service的endpoint

root@controller ~(admin/amdin)# openstack endpoint list --service image
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+
| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                    |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+
| 56d1454571064cb3ad3c749d18fb57e6 | RegionOne | glance       | image        | True    | admin     | http://controller:9292 |
| ae98462c8f4346f3991d693232a108d3 | RegionOne | glance       | image        | True    | internal  | http://controller:9292 |
| e047382ce61740bf9dc4219c97eff2f8 | RegionOne | glance       | image        | True    | public    | http://controller:9292 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+
root@controller ~(admin/amdin)# openstack endpoint delete 56d1454571064cb3ad3c749d18fb57e6
root@controller ~(admin/amdin)# openstack endpoint delete ae98462c8f4346f3991d693232a108d3
root@controller ~(admin/amdin)# openstack endpoint delete e047382ce61740bf9dc4219c97eff2f8root@controller ~(admin/amdin)# openstack endpoint create --region RegionOne \
>   image public http://controller-glance:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | b700cc0526e34aaba7579fe7fc1e7bf3 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | d6a3dadf92e542289c5ebd37e3553cdd |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller-glance:9292    |
+--------------+----------------------------------+
root@controller ~(admin/amdin)# openstack endpoint create --region RegionOne \
>   image internal http://controller-glance:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 19e20f4f9f9144118f91fff2cfb2d17b |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | d6a3dadf92e542289c5ebd37e3553cdd |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller-glance:9292    |
+--------------+----------------------------------+
root@controller ~(admin/amdin)# openstack endpoint create --region RegionOne \
>   image admin http://controller-glance:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 58b83e744b9945c8930aabfac21f207a |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | d6a3dadf92e542289c5ebd37e3553cdd |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller-glance:9292    |
+--------------+----------------------------------+
root@controller ~(admin/amdin)#

3.9 修改glance endpoint信息后,第二次重启controller node

root@controller:~#reboot

controller node重启后,需检查endpoint能否正常显示:

root@controller ~(admin/amdin)# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+-------------------------------+
| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                           |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-------------------------------+
| 19e20f4f9f9144118f91fff2cfb2d17b | RegionOne | glance       | image        | True    | internal  | http://controller-glance:9292 |
| 58b83e744b9945c8930aabfac21f207a | RegionOne | glance       | image        | True    | admin     | http://controller-glance:9292 |
| a82bd043e133464fa863fba98b400460 | RegionOne | keystone     | identity     | True    | admin     | http://controller:5000/v3/    |
| ac109817862344c4854b783d642be412 | RegionOne | keystone     | identity     | True    | internal  | http://controller:5000/v3/    |
| b700cc0526e34aaba7579fe7fc1e7bf3 | RegionOne | glance       | image        | True    | public    | http://controller-glance:9292 |
| eaf4ddaab1b74aa59403f9fbf5fc4ac1 | RegionOne | keystone     | identity     | True    | public    | http://controller:5000/v3/    |
+----------------------------------+-----------+--------------+--------------+---------+-----------+-------------------------------+
root@controller ~(admin/amdin)# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 429decdd-9230-49c0-b735-70364c226eb5 | cirros | active |
+--------------------------------------+--------+--------+
root@controller ~(admin/amdin)#

3.10 关闭虚机,拍摄快照

4、Wireshark抓包

4.1 抓包目的

通过执行openstack image list查看OpenStack各组件之间的完整交互情况。

4.2 抓包方式

1、建议win11(10.0.20.1)上用MobaXterm软件,登录10.0.20.11,运行wireshark,抓取“Loopback: lo”端口流量:

 

2、win11(10.0.20.1)用SecureCRT软件ssh登录10.0.20.11,监控TCP建立情况:

1、显示keystone、memcached、glance监听端口的进程信息,如进程ID和进程名称:root@controller:~# ss -lp | grep -E '(:5000|:11211|:9292|:3306)'
tcp   LISTEN 0      1024                                   10.0.20.19:11211                    0.0.0.0:*    users:(("memcached",pid=816,fd=22))                                                                                                                                
tcp   LISTEN 0      4096                                   10.0.20.18:9292                     0.0.0.0:*    users:(("glance-api",pid=1226,fd=4),("glance-api",pid=1225,fd=4),("glance-api",pid=1223,fd=4),("glance-api",pid=1222,fd=4),("glance-api",pid=1210,fd=4))           
tcp   LISTEN 0      511                                             *:5000                           *:*    users:(("apache2",pid=874,fd=6),("apache2",pid=873,fd=6),("apache2",pid=867,fd=6))                                                                                 
root@controller:~# 2、查看与端口5000、11211、9292和3306相关的TCP连接,需要在执行openstack image list时,同时执行此命令:
root@controller:~# ss -p | grep -E '(:5000|:11211|:9292|:3306)'

3、执行openstack image list命令

win11(10.0.20.1)用SecureCRT软件新开窗口,ssh登录10.0.20.11,在osclient上,执行:openstack image list

root@controller:~# . admin-openrc 
root@controller ~(admin/amdin)# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 429decdd-9230-49c0-b735-70364c226eb5 | cirros | active |
+--------------------------------------+--------+--------+

4、停止抓包,进行分析

4.3 抓包分析

4.3.1 TCP连接建立信息

记录执行openstack image list命令过程中,TCP连接信息,用于查看TCP连接的两端信息。

root@controller:~# ss -p | grep -E '(:5000|:11211|:9292|:3306)'
tcp   ESTAB      0      0                              10.0.20.11:53046              10.0.20.11:5000  users:(("glance-api",pid=1225,fd=7))                                                                                                                                                                                                                                                                     
tcp   CLOSE-WAIT 1      0                              10.0.20.11:53034              10.0.20.11:5000  users:(("openstack",pid=1467,fd=3))                                                                                                                                                                                                                                                                      
tcp   ESTAB      0      0                              10.0.20.11:43508              10.0.20.19:11211 users:(("glance-api",pid=1225,fd=6))                                                                                                                                                                                                                                                                     
tcp   ESTAB      0      0                              10.0.20.19:11211              10.0.20.11:43508 users:(("memcached",pid=816,fd=23))                                                                                                                                                                                                                                                                      
tcp   ESTAB      0      0                              10.0.20.11:59804              10.0.20.18:9292  users:(("openstack",pid=1467,fd=4))                                                                                                                                                                                                                                                                      
tcp   ESTAB      0      0                              10.0.20.18:9292               10.0.20.11:59804 users:(("glance-api",pid=1225,fd=5))

4.3.2 抓包结果

为观察数据流方便,过滤掉大量的kestone和keyston dbglance和glance db交互的MySql数据包,只保留每次login信息和每次最后一个response packet。

OpenStackClient、keystone api、glance api之间主要信息都是http,过滤掉大量的维护tcp连接的packets。

使用filter:

http or tcp.port == 11211 or mysql.user == "keystone" or mysql.user == "glance" or frame.number == 3784 or frame.number == 4684 or frame.number == 5431 or frame.number == 5477

抓包显示了OpenStackClient、keystone、keyston db、glance、glance DB之间的交互情况,参考前面的TCP连接的端口信息和PID信息,可以得出连接顺序为:

  1. OpenStackClient(tcp:53024) --> keystone(tcp:5000),keystone-->keystone db,认证user admin身份,取得user admin的token
  2. OpenStackClient(tcp:59804) --> glance(tcp:9292),请求image list
    1. glance(tcp:43508) --> MEMCACHE,检查是否有user admin的token
    2. glance(tcp: 53046) --> keystone(tcp:5000), keystone-->keystone db,认证uer glance身份,取得user glance的token
    3. glance(tcp:53046) --> keystone(tcp:5000), keystone-->keystone db,使用验过的glance身份(user glance的token)去认证uer admin的token,并成功
    4. glance(tcp:43508) --> MEMCACHE,存储admin token
    5. glance --> glance db,查询glance DB,取得image元数据
  3. glance(tcp:9292) --> OpenStackClient(tcp:59804),返回查询结果

4.3.3 抓包的流量图

这里使用的是keystone密码认证,用户通过用户名和密码向 Keystone 提交凭证(Credentials),Keystone 验证用户的用户名和密码,验证通过后会生成一个令牌(Token)并发送给用户,用户拿到令牌后,可以使用这个令牌访问 OpenStack 的其他服务,示意如下:

用户 -> (用户名/密码) -> Keystone -> (令牌) -> 用户

比如,这里user admin取得令牌后,访问OpenStack glance service。

glance service要继续对admin token进行验证,首先glance service自己作为用户向keystone认证,获得glance token,然后使用glance token,访问keystone服务,验证admin token。admin token验证通过后,再执行后续动作(查询glance db,返回查询结果给OpenStackClient)

5、Mermaid绘制时序图

可以用mermaid绘制时序图,方便查看:

 附mermaid code:

sequenceDiagramautonumberparticipant C as OpenStackClientparticipant K as keystoneparticipant KD as keystone DBparticipant G as glanceparticipant GD as glance DB participant M as memcachedC ->> K: user admin scope to project admin, 发送username:admin/password:xxxxNote left of C: 命令行中输入: <br/> openstack image listK ->> KD: Keystone 查询user admin的身份KD ->> K: okK ->> C: user admin身份验证成功,Keystone生成admin tokenC ->> G: user admin向 glance service请求image list,请求中包含之前从 Keystone 获取的admin tokenG ->> M: glance服务接收到请求,去memcache检查请求中的admin tokenNote right of M: 先检查memcached是否有admin tokenM ->> G: 没有,继续去keystone检查G ->> K: user glance scope to project service,发送username:glance/password:xxxxNote right of G: glance首先要认证自己的身份!K ->> KD: Keystone 查询user glance的身份KD ->> K: okK ->> G: glance的身份验证成功,Keystone 生成glance tokenG ->> K: glance服务将admin token发送回 Keystone,请求验证admin token的有效性,请求中包含之前从 Keystone 获取的glance tokenNote right of G: glance拿着自己的token,去验证admin tokenK ->> KD: Keystone 查询admin tokenKD ->> K: okK ->> G: admin token有效,Keystone 返回给glance serviceG ->> M: please store admin tokenNote right of M: 保存一份到memcacheM ->> G: storedG ->> GD: glance service根据用户的权限和角色,检索glance dbGD ->> G: 返回镜像列表G ->> C: 返回镜像列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCL-基于FPFH的SAC-IA结合ICP的点云配准方法

目录 一、相关方法原理1.凸包方法2.FPFH特征描述3.SAC-IA概述4.ICP概述 二、实验代码三、实验结果 一、相关方法原理 点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合&#xff0c;在获取物体表面每个采样点的空间坐标后&#xff0c;得到的是点的集合&…

构建智能运维系统:创新架构与效率优化

随着信息技术的迅猛发展&#xff0c;企业对于运维效率和服务质量的要求越来越高。智能运维系统的设计和实施&#xff0c;不仅能够提升系统可靠性和响应速度&#xff0c;还能有效降低成本和人力投入。本文将深入探讨智能运维系统的架构设计原则和关键技术&#xff0c;为企业在运…

数据结构重置版(概念篇)

本篇文章是对数据结构的重置&#xff0c;且只涉及概念 顺序表与链表的区别 不同点 顺序表 链表 存储空间上 物理上一定连续 逻辑上连续&#xff0c;但物理上不一定连续…

.env.local 配置本地环境变量 用于团队开发

.env.local 用途&#xff1a;.env.local 通常用于存储本地开发环境中的环境变量。这些变量可能包括敏感数据或特定于单个开发者的设置&#xff0c;不应该被提交到版本控制系统中。优先级&#xff1a;在大多数框架中&#xff0c;.env.local 文件中的变量会覆盖其他 .env 文件中…

分类模型的完整流程及Python实现

1、加载函数和数据集 import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt cancer…

linux系统查历史cpu使用数据(使用sar 查询cpu和网络占用最近1个月历史数据)。

一 sar 指令介绍 在 Linux 系统中&#xff0c;sar 是 System Activity Reporter 的缩写&#xff0c;是一个用于收集、报告和保存系统活动信息的工具。它是 sysstat 软件包的一部分&#xff0c;提供了丰富的系统性能数据&#xff0c;包括 CPU、内存、网络、磁盘等使用情况&am…

SQL中的LEFT JOIN、RIGHT JOIN和INNER JOIN

在SQL中&#xff0c;JOIN操作是连接两个或多个数据库表&#xff0c;并根据两个表之间的共同列&#xff08;通常是主键和外键&#xff09;返回数据的重要方法。其中&#xff0c;LEFT JOIN&#xff08;左连接&#xff09;、RIGHT JOIN&#xff08;右连接&#xff09;和INNER JOIN…

《JavaEE篇》--多线程(2)

《JavaEE篇》--多线程(1) 线程安全 线程不安全 我们先来观察一个线程不安全的案例&#xff1a; public class Demo {private static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {//让count自增5W次…

HarmonyOS网络请求的简单用法,HttpUtil简单封装

请求网络获取数据 点击按钮发送一个post请求&#xff0c;发送一条string由于此处的返回result.data本身就是一个string&#xff0c;因此不需要转换类型 Button(请求网络).margin({ top: 10 }).fontSize(24).fontWeight(FontWeight.Bold).onClick(() > {httpRequestPost(http…

风格迁移开发记录(DCT-Net)

1.DCT-Net部署 阿里旗下的 modelscope社区&#xff0c;丰富的开源风格迁移算法模型 DCT-Net GitHub链接 git clone https://github.com/menyifang/DCT-Net.git cd DCT-Netpython run_sdk.py下载不同风格的模型如下图每个文件夹代表一种风格&#xff0c;有cartoon_bg.pb, car…

C++STL详解(一)——String接口详解(上)!!!

目录 一.string类介绍 二.string类的构造赋值 2.1string类的拷贝和构造函数 2.2深拷贝 三.string类的插入 3.1push_back 3.2append 3.3操作符 3.4insert 四.string的删除 4.1pop_back 4.2erase 五.string的查找 5.1find 5.2rfind 六.string的比较 6.1compare函…

深入浅出WebRTC—Pacer

平滑发包&#xff08;Pacer&#xff09;是 WebRTC 实现高质量实时通信不可或缺的一部分。在视频通信中&#xff0c;单帧视频可能包含大量的数据&#xff0c;如果未经控制地立即发送&#xff0c;可能瞬间对网络造成巨大压力。Pacer 能够根据网络条件动态调整发送速率&#xff0c…

python库(14):Arrow库简化时间处理

1 Arrow简介 Arrow 是一个被称为程序员的时间处理利器的 Python 库。 从诞生起&#xff0c;它就是为了填补 Python 的 datetime 类型的功能空白而生的。为程序员提供了一种更简单、更直观的方式来处理日期和时间。 2 安装Arrow库 pip install arrow -i https://pypi.tuna.ts…

什么是设备运维管理系统?有什么作用?(6款设备运维管理系统推荐)

一、什么是设备运维管理系统&#xff1f; 设备运维管理系统是一种集成了监控、管理、维护和优化设备性能的软件平台。它旨在通过自动化的手段&#xff0c;提高设备运行的可靠性和效率&#xff0c;降低运维成本&#xff0c;并优化资源利用。 设备运维管理系统能够实时监控设备…

【1】Python机器学习之基础概念

1、什么是机器学习 最早的机器学习应用——垃圾邮件分辨 传统的计算机解决问题思路&#xff1a; 编写规则&#xff0c;定义“垃圾邮件”&#xff0c;让计算机执行对于很多问题&#xff0c;规则很难定义规则不断变化 机器学习在图像识别领域的重要应用&#xff1a; 人脸识别…

带您详细了解安全漏洞的产生和防护

什么是漏洞&#xff1f; 漏洞是 IT、网络、云、Web 或移动应用程序系统中的弱点或缺陷&#xff0c;可能使其容易受到成功的外部攻击。攻击者经常试图寻找网络安全中的各种类型的漏洞来组合和利用系统。 一些最常见的漏洞&#xff1a; 1.SQL注入 注入诸如 SQL 查询之类的小代…

BUU [PASECA2019]honey_shop

BUU [PASECA2019]honey_shop 技术栈&#xff1a;任意文件读取、session伪造 开启靶机&#xff0c;我有1336金币&#xff0c;买flag需要1337金币 点击上面的大图&#xff0c;会直接下载图片 抓包看看&#xff0c;感觉是任意文件读取 修改下路径读一下 读到了session密钥是Kv8i…

Springboot validated JSR303校验

1.导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency> 2.测试类 package com.jmj.gulimall.product.testC;import lombok.Data;import javax.val…

C++《类和对象》(中)

一、 类的默认成员函数介绍二、构造函数 构造函数名与类同名内置类型与自定义类型析构函数拷贝构造函数 C《类和对象》(中) 一、 类的默认成员函数介绍 默认成员函数就是⽤⼾没有显式实现&#xff0c;编译器会⾃动⽣成的成员函数称为默认成员函数。 那么我们主要学习的是1&…

Linux环境docker部署Firefox结合内网穿透远程使用浏览器测试

文章目录 前言1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox 前言 本次实践部署环境为本地Linux环境&#xff0c;使用Docker部署Firefox浏览器后&#xff0c;并结合cpolar内网穿…