EchoMemo
type: channel
link: https://blog.tearth.cn/
description: 日常笔记
items: Helm Chart部署Kafka
items: Linux添加硬盘后不重启识别新硬盘
items: EulerOS安装Docker,Kubernetes
items: 配置Gradle插件仓库
items: 部署GitLab
items: Kubeadm设置clusterName
items: kube-promethesu解决默认告警
items: Kube-Prometheus监控集群外部主机
items: 部署Kube-Prometheus实现Prometheus高可用
items: Docker环境下配置iptables规则无效

Helm Chart部署Kafka
type: item
date: 2025-03-20T06:38:00+00:00
description: Helm Chart部署Kafka添加helm chart仓库helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update 自定义配置安装之前可以下载chart包，解压后查看values.yaml中的配置项，根据实际情况进行修改。helm pull bitnami/kafka --version 31.5.0 tar zxvf kafka-31.5.0.tgz 配置私有镜像仓库global: imageRegistry: "docker.ascs.tech" security: allowInsecureImages: true 配置外部访问启用外部访问（默认不启用）。服务类型配置为NodePort并指定nodePorts，nodePorts类型是一个列表，列表的长度要和kafka的副本数相对应，bitnami kafka chart默认有三个副本，所以这里配置三个nodePort端口。同理，externalIPs也要跟副本数相对应。externalAccess: enabled: true controller: service: type: NodePort nodePorts: - 30092 - 30093 - 30094 externalIPs: - 192.168.100.149 - 192.168.100.149 - 192.168.100.149 配置访问协议配置所有的listeners访问协议为PLAINTEXT​。在默认情况下，访问协议为SASL_PLAINTEXT​，当启用SASL​后就需要使用用户名密码访问Kafka集群，可以通过修改sasl.client.users​ 和 sasl.client.passwords​来指定用户名和密码。如果密码未指定，会生成随机密码，可以通过命令 kubectl get secret {{ .Release.Name }}-user-passwords -o jsonpath='{.data.client-passwords}' | base64 -d​ 进行查看。listeners: client: protocol: PLAINTEXT controller: protocol: PLAINTEXT interbroker: protocol: PLAINTEXT external: protocol: PLAINTEXT 其它配置项资源请求限制如果不需要对Pod资源做限制，可以将resourcesPreset的值设置为none​。如果需要对其进行合理的设置，可以参考_resources.tpl1controller.resourcesPreset broker.resourcesPreset volumePermissions.resourcesPreset metrics.jmx.resourcesPreset 存储卷默认的PVC大小为8Gi，可以根据实际需要进行调整controller.persistence.size 完整配置文件# 指定私有仓库,加速镜像下载 global: imageRegistry: "docker.ascs.tech" security: allowInsecureImages: true # 配置允许外部访问. 默认不开启此配置 externalAccess: enabled: true controller: service: type: NodePort nodePorts: - 30092 - 30093 - 30094 externalIPs: - 192.168.100.149 - 192.168.100.149 - 192.168.100.149 # 配置访问协议为PLAINTEXT(明文). 默认配置为SASL_PLAINTEXT listeners: client: protocol: PLAINTEXT controller: protocol: PLAINTEXT interbroker: protocol: PLAINTEXT external: protocol: PLAINTEXT 部署helm upgrade --install kafka-dev \ bitnami/kafka \ -f values.yaml \ --namespace middleware \ --create-namespace \ --version 31.5.0 验证打开IDEA，安装Kafka插件。安装成功后，点击左侧工具窗口，选择Kafka，点击添加新的连接。在引导服务器中输入 192.168.100.149:30092,192.168…

Linux添加硬盘后不重启识别新硬盘
type: item
date: 2024-10-20T22:58:00+00:00
description: 在 Linux 中添加新硬盘后，有的时候需要重启系统才能识别到，可以通过以下步骤在不重启的情况下使系统识别到新硬盘。查看现有的磁盘列表先查看系统已经识别到的磁盘列表：lsblk 或者：fdisk -l 使用 rescan-scsi-bus（推荐）如果你的系统支持 rescan-scsi-bus.sh，可以安装并使用它来扫描新的硬盘设备。大多数 Linux 发行版需要先安装 scsitools 包：sudo apt-get install scsitools # Ubuntu/Debian sudo yum install sg3_utils # CentOS/RHEL 然后执行以下命令：sudo rescan-scsi-bus 手动扫描 SCSI 主机如果没有 rescan-scsi-bus.sh，可以通过手动扫描 SCSI 主机来使新硬盘被识别：echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan 这会强制系统扫描所有 SCSI 主机并识别新设备。验证执行命令查看是否识别到了新硬盘：lsblk 或者：fdisk -l 新添加的硬盘应该会出现在磁盘列表中。

EulerOS安装Docker,Kubernetes
type: item
date: 2024-10-09T05:32:00+00:00
description: 环境信息LSB Version: n/a Distributor ID: HuaweiCloudEulerOS Description: Huawei Cloud EulerOS release 2.0 (West Lake) Release: 2.0 Codename: WestLakeEulerOS 是基于 CentOS 开发的，它同样使用 yum 作为软件包管理器，大部分配置和操作与 CentOS 类似。本文是在线环境安装，如果服务器无法联网，可以通过下载rpm包的方式进行安装。安装Docker安装必要依赖在安装Docker之前首先需要安装 fuse-overlayfs 和 slirp4netns，是 Docker 的 Rootless 模式和容器相关技术的两个关键组件。fuse-overlayfs：用于支持 rootless 容器的分层文件系统；slirp4netns：用于在 rootless 容器中提供网络功能。由于服务器默认的yum存储库不能安装，所以需要自己配置需要的yum存储库，这里使用阿里云提供的CentOS arm源。将以下内容追加到文件/etc/yum.repos.d/hce.repo末：#additional packages that may be useful [extras] name=CentOS-7 - Extras baseurl=http://mirrors.aliyun.com/centos-altarch/7/extras/aarch64/ gpgcheck=0 gpgkey=http://mirrors.aliyun.com/centos-altarch/7/os/aarch64/RPM-GPG-KEY-CentOS-7 enabled=1安装 fuse-overlayfs 和 slirp4netnsyum install fuse-overlayfs slirp4netns安装成功后可继续下面的步骤安装Docker安装必要的系统工具yum install -y yum-utils device-mapper-persistent-data lvm2配置docker-ce存储库yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo修改信息sed -i 's|$releasever|7|g' /etc/yum.repos.d/docker-ce.repo sed -i 's|$basearch|aarch64|g' /etc/yum.repos.d/docker-ce.repo更新docker-ce存储库，并安装docker-ceyum makecache fast yum -y install docker-ce启动docker服务并配置开机自启systemctl start docker systemctl enable docker添加配置文件 /etc/docker/daemon.json，文件内容如下：{ "registry-mirrors": ["https://registry.example.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } }重载配置文件并重启docker服务，使配置生效systemctl daemon-reload systemctl restart docker安装kubernetes准备工作禁用防火墙systemctl stop firewalld systemctl disable firewalldsystemctl stop firewalld：立即停止 firewalld 服务（防火墙管理服务）。systemctl disable firewalld：禁用 firewalld 服务，使其在系统重启后不会自动启动。关闭交换分区swapoff -a sed -i '/swap/d' /etc/fstabswapoff -a：关闭所有的交换分区（swap）。Kubernetes 要求节点不能使用 swap 来避免性能问题。sed -i '/swap/d' /etc/fstab：编辑 /etc/fstab 文件，删除任何有关 swap 的条目，确保系统重启时不会重新启用 swap。加载内核模块cat >/etc/modules-load.d/k8s.conf <<EOF overlay br_netfil…

配置Gradle插件仓库
type: item
date: 2024-10-07T08:59:00+00:00
description: 从GitHub上下载一个开源项目，导入到IDEA后无法下载插件依赖，根据日志提供的报错信息，发现这些从https://plugins.gradle.org下载的插件链接都是404，所以需要配置插件仓库覆盖默认的仓库。找到项目目录中的settings.gradle文件，添加下面内容pluginManagement { repositories { maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } gradlePluginPortal() mavenCentral() jcenter() } }上述配置首先会从阿里云的 Maven 仓库（maven.aliyun.com）尝试获取插件，如果找不到，则依次从 gradlePluginPortal() 和mavenCentral() 这些官方仓库中获取插件。

部署GitLab
type: item
date: 2024-09-27T09:52:00+00:00
description: 环境kubernets version：v1.27.15Docker version：27.0.3Helm version：v3.15.2GitLab version：v17.4.1快速启动添加helm gitlab chart仓库helm repo add gitlab https://charts.gitlab.io helm repo update执行下面命令快速进行部署helm upgrade --install gitlab gitlab/gitlab \ --version 8.4.1 \ --timeout 6000s \ --set global.hosts.domain=example.com \ --set certmanager-issuer.email=mail@example.com \ --namespace=gitlab \ --create-namespace这里我们快速启动一套GitLab服务，这里选择自定义了一些配置项--version 8.4.1 ：Chart版本为8.4.1，对应的GitLab版本为v17.4.1--timeout 6000s：部署超时时间为6000sglobal.hosts.domain=example.com：配置域名，后续实际生成的域名会根据所配置的域名进行扩展，比如配置了example.com，后续GitLab服务的域名就是gitlab.example.com，Minio服务的域名为minio.example.com。当然，也可以针对每个组件服务自定义域名，详情查看values.yaml或者查阅官方文档certmanager-issuer.email：当使用certmanager提供的证书，必须提供一个邮箱除此，其余配置都为默认配置。等待片刻，Job执行完成，Pod启动成功，就可以使用域名在浏览器访问GitLab了。默认的用户名为：root，密码可通过下面命令获取：kubectl get secret -n gitlab gitlab-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo自定义部署在很多情况下，我们不需要安装chart中的所有组件，比如集群环境中已经部署certmanager或者计划使用已有的证书，那就不需要再安装certmanager，我们就可以certmanager.install设置为false，同时设置global.ingress.tls.secretName来自定义证书；还有，如果不需要部署runner服务，那我们就可以将gitlab-runner.install设置为false避免安装runner。配置私有镜像仓库配置私有镜像仓库，加快镜像拉取速度global: enterpriseImages: # Default repositories used to pull Gitlab Enterprise Edition images. # See the image.repository and workhorse.repository template helpers. migrations: repository: docker.example.com/gitlab-org/build/cng/gitlab-toolbox-ee sidekiq: repository: docker.example.com/gitlab-org/build/cng/gitlab-sidekiq-ee toolbox: repository: docker.example.com/gitlab-org/build/cng/gitlab-toolbox-ee webservice: repository: docker.example.com/gitlab-org/build/cng/gitlab-webservice-ee workhorse: repository: docker.example.com/gitlab-org/build/cng/gitlab-workhorse-ee geo-logcursor: repository: docker.example.com/gitlab-org/build/cng/gitlab-geo-logcursor certificates: image: repository: docker.example.com/gitlab-org/build/cng/certificates kubectl: image: repository: docker.example.com/gitlab-or…

Kubeadm设置clusterName
type: item
date: 2022-05-04T04:00:00+00:00
description: Kubeadm设置clusterName使用Kubeadm可以快速的创建一个k8s集群，但是默认情况下Kubeadm创建的集群名称都是kubernetes(集群名称可以使用命令kubectl config get-clusters查询)。在实际使用中，如果管理多个k8s集群，就需要对集群名称做区分，方便管理维护。通过网上查找资料，现在可以通过修改kubeadm初始化配置文件，自定义clusterName，操作步骤如下：[scode type="yellow"]配置文件的功能仍然处于 alpha 状态并且在将来的版本中可能会改变，但是一些更加高级的功能只能够通过配置文件设置，比如clusterName[/scode]使用命令kubeadm config print init-defaults > kubeadm-init.yaml获取kubeadm init 的默认 init 配置对象，并将其写入到文件kubeadm-init.yaml中，文件内容如下：apiVersion: kubeadm.k8s.io/v1beta3 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 1.2.3.4 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock imagePullPolicy: IfNotPresent name: node taints: null --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local: dataDir: /var/lib/etcd imageRepository: k8s.gcr.io kind: ClusterConfiguration kubernetesVersion: 1.23.0 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 scheduler: {}对生成的默认配置文件进行修改，这里按照实际需求，对下面的几个配置项进行修改：集群名称clusterName、镜像仓库地址imageRepository、Service网段networking.serviceSubnet、Pod网段networking.podSubnet，最终修改后的文件内容如下：apiVersion: kubeadm.k8s.io/v1beta3 clusterName: k8s-dev imageRepository: registry.aliyuncs.com/google_containers kind: ClusterConfiguration networking: serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16使用修改后的文件初始化集群kubeadm init --config kubeadm-init.yaml踩坑flannel CrashLoopBackOff问题和原因集群初始化操作完成之后，部署flannel，过一会就会看到flannel Pod CrashLoopBackOff，查看flannel日志有这么一行Error registering network: failed to acquire lease: node "ubuntu-vm" pod cidr not assigned，很明确告知了flannel CrashLoopBackOff 的原因是未分配Pod网段。I0503 10:17:21.246851 1 main.go:205] CLI flags config: {etcdEndpoints:http://127.0.0.1:4001,http://127.0.0.1:2379 etcdPrefix:/coreos.com/network etcdKeyfile: etcdCertfile: etcd…

kube-promethesu解决默认告警
type: item
date: 2022-05-02T03:37:00+00:00
description: kube-promethesu解决KubeProxyDown等默认告警在kube-promethesu部署完成之后，会出现KubeControllerManagerDown、KubeProxyDown、KubeSchedulerDown、Watchdog四个告警Watchdog查看Watchdog的告警描述：This is an alert meant to ensure that the entire alerting pipeline is functional. This alert is always firing, therefore it should always be firing in Alertmanager and always fire against a receiver. There are integrations with various notification mechanisms that send a notification when this alert is not firing. For example the "DeadMansSnitch" integration in PagerDuty.，简单来说，这个告警是为了保证告警功能可以正常使用，如果这个告警消失，那就表示告警系统出了问题。如果不需要这个功能，可以修改prometheus目录中的相关文件kubePrometheus-prometheusRule.yaml，注释或删除相关的内容。apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: app.kubernetes.io/component: exporter app.kubernetes.io/name: kube-prometheus app.kubernetes.io/part-of: kube-prometheus prometheus: k8s role: alert-rules name: kube-prometheus-rules namespace: monitoring spec: groups: - name: general.rules ... # - alert: Watchdog # annotations: # description: | # This is an alert meant to ensure that the entire alerting pipeline is functional. # This alert is always firing, therefore it should always be firing in Alertmanager # and always fire against a receiver. There are integrations with various notification # mechanisms that send a notification when this alert is not firing. For example the # "DeadMansSnitch" integration in PagerDuty. # runbook_url: https://runbooks.prometheus-operator.dev/runbooks/general/watchdog # summary: An alert that should always be firing to certify that Alertmanager # is working properly. # expr: vector(1) # labels: # severity: none - name: node-network ... - name: kube-prometheus-node-recording.rules ... - name: kube-prometheus-general.rules ...修改完成后，使用kubectl apply -f prometheus/kubePrometheus-prometheusRule.yaml更新配置，稍等片刻，就可以看到告警Watchdog已从告警列表消失。KubeControllerManagerDownKubeControllerManagerDown告警描述：KubeControllerManager has disappeared from Prometheus target discovery.，翻译：KubeContro…

Kube-Prometheus监控集群外部主机
type: item
date: 2022-04-28T15:25:00+00:00
description: 自定义抓取配置在prometheus目录下创建一个新目录AdditionalScrapeConfigs用来存放集群外部一些抓取的配置文件 ➜ ~ mkdir -p prometheus/AdditionalScrapeConfigs在目录AdditionalScrapeConfigs中新建两个文件：additional-scrape-configs-Secret.yaml和additional-scrape-configs-ConfigMap.yaml，示例如下：additional-scrape-configs-Secret.yaml（新建）apiVersion: v1 kind: Secret metadata: name: prometheus-additional-scrape-configs-secret namespace: monitoring labels: app.kubernetes.io/component: prometheus-targets app.kubernetes.io/instance: main app.kubernetes.io/name: prometheus-additional-scrape-configs app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 0.23.0 stringData: prometheus-additional-scrape.yaml: | # 以下内容自定义 - job_name: node-exporter file_sd_configs: - files: - /additional-scrape-configs/node-exporter.yaml refresh_interval: 30s relabel_configs: - source_labels: - __address__ regex: '(.*):9100' target_label: instance action: replace replacement: $1 - job_name: container-exporter file_sd_configs: - files: - /additional-scrape-configs/container-exporter.yaml refresh_interval: 30s type: Opaqueadditional-scrape-configs-ConfigMap.yaml（新建）apiVersion: v1 kind: ConfigMap metadata: name: prometheus-additional-scrape-configs-configmap namespace: monitoring labels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: main app.kubernetes.io/name: prometheus-additional-scrape-configs app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 0.23.0 data: node-exporter.yaml: | # 以下内容自定义 - targets: - "192.168.33.254:9100" container-exporter.yaml: | # 以下内容自定义 - targets: - "192.168.33.254:9080"prometheus-prometheus.yaml（更新）apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: labels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 2.32.1 name: k8s namespace: monitoring spec: ... version: 2.32.1 ## 新增以下配置 # 挂载configMap volumeMounts: - name: prometheus-additional-scrape…

部署Kube-Prometheus实现Prometheus高可用
type: item
date: 2022-04-24T13:00:00+00:00
description: 介绍Kube-Prometheus官网该项目收集Kubernetes清单，Grafana仪表板和Prometheus规则，并结合文档和脚本，以使用Prometheus运算符提供易于操作的端到端Kubernetes集群监控。目前最新版本：v0.10.0，本文使用最新版本进行安装。Kube-Prometheus主要包括以下组件：Prometheus OperatorPrometheus Operator有以下功能：定义Kubernetes资源类型，比如Prometheus，Alertmanager，PrometheusRule等；简化部署和配置；基于Kubernetes标签自动生成target配置。高可用的Prometheus高可用的AlertmanagerPrometheus Node-exporterPrometheus Adapter for Kubernetes Metrics APIskube-state-metrics可视化仪表盘Grafana[scode type="yellow"]根据Kubernetes版本，选择合适的kube-prometheus版本[/scode]kube-prometheus stackKubernetes 1.19Kubernetes 1.20Kubernetes 1.21Kubernetes 1.22Kubernetes 1.23release-0.7✔✔✗✗✗release-0.8✗✔✔✗✗release-0.9✗✗✔✔✗release-0.10✗✗✗✔✔main✗✗✗✔✔环境说明操作系统：CentOS 7.9.2009Kube-Prometheus：v0.10.0Kubernetes：v1.23.5Docker：20.10.14一键部署克隆仓库到本地或者下载指定的版本的Releases包，下面命令是官方提供的部署命令，可以快速的启动。kubectl apply --server-side -f manifests/setup until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done kubectl apply -f manifests/但是会存在以下问题：官方yaml文件没有归类，不方便之后的集群管理；部分image需要从k8s.gcr.io拉取，如果是国内机器并没有合适的代理，那就会导致image无法拉取；Prometheus和Grafana没有配置数据持久化，一旦pod重启或被删除，数据也将被删除；默认的Service无法暴露服务端口到集群外的客户端。自定义部署为了针对性地解决上面几个问题，我们进行以下处理yaml文件分类Kube-Prometheus v0.10.0一共有84个yaml文件 ::aru:distressed:: 为了方便管理，根据服务类型将相应的yaml文件进行分类是很有必要的。创建目录mkdir alertmanager blackboxExporter grafana kubeStateMetrics kubernetesControlPlane nodeExporter prometheus prometheusAdapter prometheusOperator根据服务类型yaml文件进行分类mv alertmanager-* ./alertmanager mv blackboxExporter-* ./blackboxExporter mv grafana-* ./grafana mv kubeStateMetrics-* ./kubeStateMetrics mv kubernetesControlPlane-* ./kubernetesControlPlane mv nodeExporter-* ./nodeExporter mv prometheus-* ./prometheus mv prometheusAdapter-* ./prometheusAdapter mv prometheusOperator-* ./prometheusOperator mv kubePrometheus-prometheusRule.yaml ./prometheus此时目录结构如下[collapse status="false" title="目录结构 (10 directories, 84 files)"]. ├── alertmanager │ ├── alertmanager-alertmanager.yaml │ ├── alertmanager-podDisruptionBudget.yaml │ ├── alertmanager-prom…

Docker环境下配置iptables规则无效
type: item
date: 2022-04-20T08:14:00+00:00
description: 场景在服务器用Docker启动了一个MySQL实例，并通过-p将容器的端口3306映射到宿主机的8006。 ➜ ~ docker run --name mysql --restart always -p 8006:3306 -e LANG=C.UTF-8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql现在使用iptables限制连接MySQL的客户端IP，这里向INPUT链中插入一条DROP规则拒绝来自192.168.33.0/24的主机访问宿主机的8006。 ➜ ~ iptables -I INPUT -p tcp --dport 8006 -s 192.168.33.0/24 -j DROP ➜ ~ iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP tcp -- * * 192.168.33.0/24 0.0.0.0/0 tcp dpt:8006 2 411 28776 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 6 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited添加规则之后，在本机进行测试仍然可以连通192.168.33.8:8006，防火墙规则没生效。 Tearth-MBP:~ tearth ~ telnet 192.168.33.8 8006 Trying 192.168.33.8... Connected to example.com. Escape character is '^]'. J 8.0.258bKQ=+�DzLWtOAw5*%caching_sha2_password在服务器查看刚添加的这条规则(num: 1)，没有任何流量经过这条规则，再次确定了这条规则没有生效。 ➜ ~ iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP tcp -- * * 192.168.33.0/24 0.0.0.0/0 tcp dpt:8006 2 2333 163K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 6 64 4992 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited原因在 Linux 上，Docker 操纵iptables规则来提供网络隔离，Docker 安装了两个自定义 iptables 链DOCKER-USER和 的DOCKER，并确保传入的数据包始终首先由这两个链检查。如果通过 Docker 公开一个端口，无论防火墙配置了什么规则，这个端口都会被公开。如果希望即使在端口通过 Docker 公开时也应用这些规则，则必须将这些规则添加到 DOCKER-USER链中。解决根据Docker官方文档，可以通过在DOCKER-USER链中添加相应的规则控制。（⚠️ 在DOCKER-USER中配置规则，端口写容器监听的端口3306，而不是映射到宿主机的端口8006） ➜ ~ iptables -I DOCKER-USER -p tcp --dport 3306 -s 192.168.33.0/24 -j DROP再次测试防火墙规则是否生…