24.云原生ArgoCD高级之数据加密seale sealed
云原生专栏大纲
文章目录
- 数据加密之seale sealed
- Bitnami Sealed Secrets介绍
- Bitnami Sealed Secrets工作流程
- 安装sealed-secrets和kubeseal
- 安装sealed-secrets-controller
- 安装kubeseal
- 通过kubeseal将sealed-secrets公钥拿出来
- 通过kubeseal加密secrets
- 替换kustomize下secret为加密secret
- 创建argocd应用测试
- 备份公钥私钥容灾处理
数据加密之seale sealed
kustomize项目中secret.yaml中DB配置只是简单加密存在安全问题,两种解决方案:
- secret.yaml不要暴露到项目中,运维人员提前在kubesphere中创建;
secret不跟项目绑定在k8s上不好管理,使用kubesphere中的保密字典能解决这个问题
- 暴露出secret.yaml需加密
参考secret加密管理方案,选择使用Bitnami Sealed Secrets
Bitnami Sealed Secrets介绍
Bitnami Sealed Secrets 是一个用于加密和管理敏感信息的工具,它是基于 Kubernetes 的 Sealed Secrets 控制器。Sealed Secrets 可以安全地存储和传输敏感的密钥、密码、API 密钥等信息,确保这些信息在存储和传输过程中不会被泄露。
下面是 Bitnami Sealed Secrets 的一些主要特点和工作原理:
- 加密敏感信息:Bitnami Sealed Secrets 使用公钥/私钥加密方案,将敏感信息加密为 Sealed Secrets 对象。只有持有私钥的人才能解密和读取这些信息。
- GitOps 集成:Sealed Secrets 可以与 GitOps 工作流程集成,使敏感信息的管理更加自动化和可追踪。您可以将加密的 Sealed Secrets 对象存储在 Git 存储库中,将其作为代码的一部分进行版本控制和协作。
- 密钥管理:Bitnami Sealed Secrets 提供了密钥管理工具,用于生成和管理公钥/私钥对。这些密钥对用于加密和解密 Sealed Secrets 对象。
- 控制器和解封工具:Bitnami Sealed Secrets 包含一个 Kubernetes 控制器,用于将 Sealed Secrets 对象解密为原始的 Secret 对象。解封工具可用于在非 Kubernetes 环境中解密 Sealed Secrets 对象。
使用 Bitnami Sealed Secrets,您可以更安全地管理和传输敏感信息,同时保持操作的自动化和可追踪性。它适用于需要在 Kubernetes 环境中存储和使用敏感信息的场景,如密码、API 密钥、数据库凭据等。通过加密和密钥管理,Bitnami Sealed Secrets 提供了一种可靠的方式来保护敏感信息,并确保只有授权的人员能够访问和使用这些信息。
Bitnami Sealed Secrets工作流程
Bitnami Sealed Secrets 的工作流程如下:
- 生成密钥对:首先,您需要生成公钥/私钥对,用于加密和解密敏感信息。这可以通过 Bitnami Sealed Secrets 提供的密钥管理工具完成。生成的公钥将用于加密敏感信息,并将其存储为 Sealed Secrets 对象。
- 加密敏感信息:使用生成的公钥,您可以将敏感信息加密为 Sealed Secrets 对象。这可以通过将敏感信息转换为 Kubernetes Secret 对象,然后使用 Sealed Secrets 控制器将其加密为 Sealed Secrets 对象来实现。
- 存储 Sealed Secrets 对象:加密后的 Sealed Secrets 对象可以存储在 Git 存储库中,作为代码的一部分进行版本控制和协作。在存储库中,Sealed Secrets 对象将被视为不可读的密文。
- 部署 Sealed Secrets 控制器:在 Kubernetes 集群中部署 Sealed Secrets 控制器。该控制器将负责监视并解密存储在 Sealed Secrets 对象中的敏感信息,并将其转换为原始的 Kubernetes Secret 对象。
- 解密敏感信息:一旦 Sealed Secrets 控制器在集群中运行,它将自动解密 Sealed Secrets 对象,并将其转换为原始的 Secret 对象。这样,其他应用程序和服务就可以使用这些解密后的敏感信息,如密码、API 密钥等。
通过这个工作流程,Bitnami Sealed Secrets 提供了一种安全的方式来管理和使用敏感信息。敏感信息在存储和传输过程中都是加密的,只有在运行 Sealed Secrets 控制器的 Kubernetes 集群中才能被解密和使用。这样可以保护敏感信息免受未经授权的访问和泄露。同时,使用 GitOps 工作流程,可以将加密的 Sealed Secrets 对象与代码一起进行版本控制和协作,提高开发团队的效率和安全性。
安装sealed-secrets和kubeseal
选择版本:https://github.com/bitnami-labs/sealed-secrets/releases 下载如下文件
安装sealed-secrets-controller
介绍两种部署方式:
方式1:选择版本:https://github.com/bitnami-labs/sealed-secrets/releases
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.25.0/controller.yaml# 修改文件中镜像地址
# 将image: docker.io/bitnami/sealed-secrets-controller:0.25.0
# 修改为ghcr.io/bitnami-labs/sealed-secrets-controller:0.25.0
# 参考https://github.com/bitnami-labs/sealed-secrets/pkgs/container/sealed-secrets-controller
安装后再kubesphere系统组件中会出现如下信息:
并生成保密字典信息:
方式2:在kubesphere中通过应用仓库部署
安装kubeseal
# -0 kubeseal将下载文件保存问当前目录下kubeseal
wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.25.0/kubeseal-linux-amd64 -0 kubesealmv kubeseal /usr/local/bin/kubeseal
# 验证
kubeseal --version
Kubeseal 是一个用于创建和管理 Sealed Secrets 的工具,它是 Bitnami Sealed Secrets 的一部分。Kubeseal 通过与 Kubernetes API 交互,可以生成 Sealed Secrets 对象并将其加密为密文,以便安全地存储和传输敏感信息。
下面是 Kubeseal 的一些主要特点和用法:
- 生成 Sealed Secrets 对象:使用 Kubeseal,您可以从现有的 Kubernetes Secret 对象生成 Sealed Secrets 对象。这可以通过运行命令行工具来完成,工具会将 Secret 对象的内容加密并生成相应的 Sealed Secrets 对象。
- 加密敏感信息:Kubeseal 使用 Sealed Secrets 控制器的公钥来加密敏感信息。在生成 Sealed Secrets 对象时,Kubeseal 会自动获取集群中的 Sealed Secrets 控制器的公钥,并使用该公钥对敏感信息进行加密。
- 密钥管理:Kubeseal 可以与密钥管理工具集成,用于生成和管理 Sealed Secrets 控制器所需的公钥/私钥对。这些密钥对用于加密和解密 Sealed Secrets 对象。
- GitOps 集成:Kubeseal 可以与 GitOps 工作流程集成,使生成的 Sealed Secrets 对象可以与代码一起进行版本控制和协作。您可以将生成的 Sealed Secrets 对象存储在 Git 存储库中,确保敏感信息的安全性和可追踪性。
使用 Kubeseal,您可以更方便地创建和管理 Sealed Secrets 对象,将敏感信息加密为密文,并确保只有在运行 Sealed Secrets 控制器的 Kubernetes 集群中才能解密和使用这些信息。它简化了 Sealed Secrets 的生成过程,并提供了与密钥管理和 GitOps 的集成,使敏感信息的管理更加自动化和可靠。
通过kubeseal将sealed-secrets公钥拿出来
可以通过kubesphere查看保密字典或者通过k8s命令查看拷贝出来,手动操作可能会出错,推荐使用kubeseal将公钥拿出来
# 备份公钥
kubeseal --fetch-cert > public-cert.pem
将公钥拷贝到argocd-in-action测试项目argocd-in-action下
通过kubeseal加密secrets
https://github.com/ppsite/argocd-in-action
- secret.yaml如下:
apiVersion: v1
kind: Secret
metadata:name: db-connectionnamespace: flask-demo
type: Opaque
data:DB_NAME: ZGVtbw==DB_USERNAME: cm9vdA==DB_PASSWORD: cGFzc3dvcmQ=DB_HOST: MTI3LjAuMC4xDB_PORT: OTUyNw==
DB明文内容如下:
- 加密secret.yaml
kubeseal --format=yaml --cert ./public-cert.pem < secret.yaml > secret-sealed.yaml
这个命令使用了 kubeseal 工具,它是一个用于密钥管理和加密 Kubernetes Secrets 的工具。让我们逐步解释这个命令的每个部分:
- kubeseal: 这是执行密钥管理和加密操作的命令。
- –format=yaml: 这个选项指定输出的格式为 YAML。它告诉 kubeseal 命令将密封(sealed)的 Secret 输出为 YAML 格式。
- –cert .public-cert.pem: 这个选项指定了用于密封操作的公钥证书文件。./public-cert.pem 是公钥证书的文件路径。密封操作使用公钥来加密 Secrets。
- < secret.yaml: 这个符号 < 表示将 secret.yaml 文件作为输入传递给 kubeseal 命令。secret.yaml 是包含要密封的 Secret 数据的文件。
-
secret-sealed.yaml: 这个符号 > 表示将 kubeseal 命令的输出重定向到 secret-sealed.yaml 文件中。secret-sealed.yaml 是生成的密封(sealed)的 Secret 数据的输出文件。
综合来说,这个命令的作用是将 secret.yaml 文件中的 Secret 数据进行加密,并将加密后的结果保存到 secret-sealed.yaml 文件中。加密操作使用了 kubeseal 命令所指定的公钥证书文件(.public-cert.pem)。密封(sealed)的 Secret 数据可以安全地存储或传输,只有拥有相应私钥的人才能解密并访问其中的数据。这样可以确保在 Kubernetes 集群中管理敏感信息时的安全性。
替换kustomize下secret为加密secret
- 查看secret-sealed.yaml文件,发现DB配置已经加密:
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:creationTimestamp: nullname: db-connectionnamespace: flask-demo
spec:encryptedData:DB_HOST: AgCzkIzXN9kxF/2+hShvPr+ic7cnxt5kbMtkaPbUe+d3Hvo87y3F2/MV2s8jn/OQmw5F05YkLa9o3mU4ilVLqeyFPl6uATyrkYPm9k7Qc+0e8TwWf3/LvFayMHKdbv0cT3nd8vc43+pD/37o8sY8DWTQ1bb9ffSwsoyue9mOrs5tSXtCxcR8AubXSaC+8lzCHnObTCe4JDUMjc838fhmA8Uub6T0csBhiiBGI9DHJT+87RtgDjHYrc6A90Vx35eGfrlLuCGwlPe4gsshUB0n6BaBpBjSzBhrOiH9z5bY1yLk5NnNzKp/Pk+hdVOrsg74R3yoXF0mqmoa152jWwgR7R1rDCmBe5oN0i+EeSrbBa6jujR4M5yJXmDbNrgnC1yhrN+w/fC9w51QAwQQGxY8VWw6A8vJVvyUSPaWWSzbsw/a0lbDnUcC7AdeZ2bXAnY8/BKDNskJ17lO0ReaB2AImXpEjXq+KZPQABCEj6epxRa3zOKurpAewVcmWwbPtlgjySH4nGzc9TDrCjHy4epBPtp0niIWIfnOV3HndsE9OdETYOQtITZQu/s6wmvQbt7g5pP7d6uf6S/c7cfZW1ZXzjg9vHzea56rvp5wPs19A8kvl9ArYOvgDxUu0EKV5KDpjHJr6G5ZCpBZxDbirHN0pTcSbxVir3apQ9I8Pi8pKCZbNyejX31WGzyh1KfIoe394sjnxm+Hf4Ui4JI=DB_NAME: AgCErq9kQOue3LKVOIYrxosypAWPrN7cxrysiIgK6jVORTH/bWj06XP7MBAYaawvzX3zG4ovh52fHzXlNmyT1cwvosxSIyPRB+pKfOiD7VvzV0k1TG9Yux2rxOS3RamNLnwnChbYsUFcq/oy9ImqdHwcNlI6jTrTp/zOB4sX8SOtfKJPmXY+FwHovHgP0zY9PG/XF0G7E1PH3jQbJDTUI/aer7ZCRLT45u2H0aIGfNJ60U3xw341TyDN/stY7nJHue3eEpPcz7DI+sIwkbQN/PV+i4R2gUkO92BzP62b32pbrFuJ8ouSUyHhIUGliRRcaeNMNlIxWN8E+gB31M3OG77ULfBRQAG3jOrpHaoVDSEj1TiYiSYcyqYSVnsL5OsQdc3sVunlBqi68U3RiYJ3tiW88BW4AJAozJPzihjMDn3kJ3qmPAp+9UaWnFLuydMG55pPaN+HrWuOMtuhChqze4xs3ryU+7AYplBM7Qi/auMipq7qxiwm8gQBLIylmIHDWrEjcD+y93Nv9lAXYkA3hYKg2wKW2ntMvSd2N+rCCwrSmlpRhSX47eLFEeqIdHpjN0or4m+R7kj8zonE2rTmCxp7axZhoucHcU/XbHRcbufitwTismZw36XyC3wSpNy9urfsOkAt2KfDGZWKGUpWANO8QEuST9N7ORVvRG4Rw7sDzcdFmZUEoyFKibHgVr0GNgQLZ3GUDB_PASSWORD: AgAoeg8lSHrL7KuXXE42a0yDTHBBaSkpgrfuudnaH7V0eHiIH1bjaM+vSl8wJdMUJ+QAcqPJ/QzvYjqU8vOH7JWwz28GzzBhtOV0/nOrtGREjNKEBqvjDvUDZdxU1AtQrvwivRhROd2F1TmvU77FQkL7nzclhVuIud3DOatZAcEAZNtuhVMtrqWkOP2H9RFgt4fbTGMvwtL1lj2TLXlKPKlSywAnMhrh5JCmkilEoPN1s9GJy6bVpgN355stYIlHaURi8bLy1DvtZrinBr2Eh9yk5HZTHto2TAvYfZl9PzkjV2upX14bX21+VPHwUSfYbdU9JG/M31BDJVIYxd54ue9fWiV3n/Df9/F+/dB9qlntsaOe8lMxJHr0/HRkGg2Bcqa2U5GDyn8aF+lNxaJJefI24hPPnzdU8LhQUJYa80n7wMNZQAK+7BReeVAg3OYGhtOwldOmMbAJMEH+aQ0sRapx7xgU7yqF8afdDEDsmv5p9ZBa5KAxqVoatlsWxqkAgvpkgycZGuAeEb4KZNltBqPAPPee//yaJkVXQ3LVrDftuYAoWoiHOcKdUc2f7bnBMC8tGz+fUL8Ipsjlo+NdkV58go2fg4neG0XGuIY5vv6362ZtD8hlFPIZsjE+v3jDChZr8d2YHHgm7Rd947UVHwoOGJ/bs+Se56CEF6UQblsjk01PbXZ7NBXGMEWUHD8p/bKyDkAEB2DCLg==DB_PORT: AgBwjV6sMLMVPCXiphwIatStoYc0MeqghB3ewQ3OpnO+Q/Qzuf9dR4eWqWYmwoOgwEo9FdJTA/vRNhy087ZYA3lsCjdfFvqlcdo5JkDyWszs0rfYNsoqrr0R6AP+41M6JEtdaJN5GNWAZXfWLA6jK4/nvG8tlXW6eg7FS9egLjHlbO/6+lh2Z2tqOFwh9Ifmw4Cb6JKOHgd7NXCW5U9UV9PO9uxP44JFaJwOIeNpSzcTswn5RZqrfaCSzhvXvgnjB7XDwoM9dn0tvBg8bC2dfIoMcSHvQUBVxSqt0DLdDr+de0e1E3zUvjofZ0DAs2CSAXyyxjy6p3nglyvKo0D6GPizEEOpOVFv/9+eehp+TwcezOHjlE8WZRlC5NT9hD7qCu9xXfNRG/oDI1ayn76WjOcq0yK4Gm13NzKvZTlolwEYs+jgCF7c9lFeG3uezGdVY2tLCYe98YzXhdXEejkOcBi0NGa6IQeqjBRfRPOfPyKwIfZKJgyi9SpTfPrO+dGc9AthIh7SxOqKoTzIuQNdvG8DxoahFYWuxzFq2jOwIOcFrp5Vu8Nb1aFnf9BWeKV/3w34MpNl6TDnZSzxgLO5pDu2qnbgMDH4ZWDru2Mg9VAzPDiSBrFJwbO7cIWRihoM4NZDXFsiFsS+eV+hN1/x4xPJJdbAlAKlNOnoEqjjPIngeTkiz37ShBFgiLoWlZzlFY27ZDaaDB_USERNAME: AgAMmJwduaDQh3tVitC1qU6Cf1NvhO4mFW8b/42JlGieEeIEiqOqVXctqlZwYcTwSBt/nu2qWq+5VMA25sGfQwS1z7k5oQPKZFoWcl4KlMhnSIZiBkdinPiqneoKBmrYiCs7lFDj4hY4yGwzSpE1zepjAUUfaW+poHAWFn/WN2bGqcgqXPkQlbCcRQa/lH50k/Ddup2SrQB/YkpAfbT9Rp1ST308UnxwJbs5bki6alAar807BaoCfANrnAJRvDGel2SzLAyNb66o7k6on6Ceh9cRGG1tv4YVdQcrbnF1E1r5qxJumQtID0/FSezbFFeS6ukawopdilt8ymGvM/l/p2O8Spaa6UyGnvlSt96PPSpHH7LBX5Ji7O2bxauaTSxQadIYEfqg/uuHDWvfHMIVYCR41knV1GwKiVdyzlCshIXmW4XaqUEf3mDT3ckLm8liGDl9NS42VteEcI52n7dV5/YbksOiAkQq5JZQRwAR9mOY8USQ/SVm42ZZ8q4LMYw5PGrgGG4pZTlM+AjzfA++ebhKqjMVTt0q+Mznfo6xeXKIvnlkvcOYLmBlxEW+hz2wXNmvWrVbs9WKGshR2LSU+Ktxhv8HVXMFRxIWKVjyGxtdw58X6sef1sWSmaVzQFTrZ0yl/KFCjK0O8n5qk9CrUWB95QofOMoEz4BRcePLQYgPXnp10U+IqpSCPQVXmUqSgSjdjlj+template:metadata:creationTimestamp: nullname: db-connectionnamespace: flask-demotype: Opaque
- 替换argocd-in-action测试项目kustomize下的secret.yaml为secret-sealed.yaml
创建argocd应用测试
发现SealedSecret创建失败,点击进入查看具体原因,提示资源已经存在
修改secret-sealed.yaml下db-connection名称,删除flask-demo名称空间,重新同步:
提示没有秘钥可以解密,查看sealed-secrets-controlled日志:
Error updating flask-demo/db-connection-secret-sealed, giving up: no key could decrypt secret (DB_HOST, DB_NAME, DB_PASSWORD, DB_PORT, DB_USERNAME)E0122 09:10:20.514766 1 controller.go:277] no key could decrypt secret (DB_HOST, DB_NAME, DB_PASSWORD, DB_PORT, DB_USERNAME)Event(v1.ObjectReference{Kind:"SealedSecret", Namespace:"flask-demo", Name:"db-connection-secret-sealed", UID:"b6e760eb-8260-4e90-b2ac-56d439f59216", APIVersion:"bitnami.com/v1alpha1", ResourceVersion:"11922787", FieldPath:""}): type: 'Warning' reason: 'ErrUnsealFailed' Failed to unseal: no key could decrypt secret (DB_HOST, DB_NAME, DB_PASSWORD, DB_PORT, DB_USERNAME)
备份公钥私钥容灾处理
- 备份私钥
kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml > private.key
- kubectl: Kubernetes 命令行工具,用于与 Kubernetes 集群进行交互。
- get secret: 获取 Kubernetes 集群中的 Secret 资源。
- -n kube-system: 指定命令在 kube-system 命名空间中执行,即获取 kube-system 命名空间下的 Secret。
- -l sealedsecrets.bitnami.com/sealed-secrets-key: 使用标签选择器,只返回具有指定标签的 Secret。这里的标签是 sealedsecrets.bitnami.com/sealed-secrets-key。
- -o yaml: 指定输出格式为 YAML。将获取的 Secret 资源以 YAML 格式打印到标准输出。
-
private.key: 将标准输出的内容重定向到 private.key 文件中。这将把 YAML 输出保存到名为 private.key 的文件中。
因此,该命令的作用是获取位于 kube-system 命名空间下,具有标签 sealedsecrets.bitnami.com/sealed-secrets-key 的 Secret 资源,并将其以 YAML 格式保存到名为 private.key 的文件中。这个文件可能包含密钥或其他敏感信息,用于后续操作或配置。
- 模拟灾难:卸载sealed-secrets-controller
kubectl delete -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.25.0/controller.yaml
上述操作不会删除secrets
- 恢复
# 先导入私钥
kubetl apply -f private.key
# 重建sealed-secrets-controller
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.25.0/controller.yaml
相关文章:

24.云原生ArgoCD高级之数据加密seale sealed
云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…...

线性代数:线性方程组
目录 一、线性方程组概念 二、消元法求线性方程组 三、系数阵的秩与线性方程组的解 无解 唯一解 无数解 相关定理 一、线性方程组概念 二、消元法求线性方程组 三、系数阵的秩与线性方程组的解 无解 唯一解 无数解 相关定理...
标准的排序组合-算法
题目 有若干个字母,要求计算出长度为4的所有可能得组合 解题 排序组合最适用的就是回溯了,建议大家本地debug一层一层的看能好理解点 private static void getResult(List<String> source, Stack<String> temp, int curLength, int maxL…...
2402C++,C++递归取各种节点名字
参考 explicit FindNamedClassVisitor(ASTContext *Context) : Context(Context) {}元<类 T>极 动作(T&e){串 ae->getQualifiedNameAsString();d.加(a);中 真;} bool VisitCXXRecordDecl(CXXRecordDecl *e) {中 动作(e);} bool VisitFunctionDecl(FunctionDecl*e…...

Qt 5.9.4 转 Qt 6.6.1 遇到的问题总结(三)
1.QSet: toList 中的toList 函数已不存在,遇到xx->toList改成直接用,如下: 2.开源QWT 图形库中QwtDial中的 setPenWidth 变成 setPenWidthF函数。 3.QDateTime 中无setTime_t 改为了setSecsSinceEpoch函数。 4.QRegExp 类已不存在 可以用Q…...

Logstash 7.7.1版本安装系统梳理
前言 上一篇文章介绍了 《ElasticSearch7.7.1集群搭建 & Kibana安装》,今天说一下 Logstash的安卓和配置; Logstash是一个开源的数据收集引擎,具有实时管道功能。它可以动态地将来自不同数据源的数据统一起来,并将数据标准化…...
4. sass实用函数归纳
4. sass实用函数归纳 字符串函数 1、quote(string) 给字符串添加引号 quote(xiaoming) // "xiaoming"2、unquote(string) 移除字符串的引号 unquote("xiaoming") // xiaoming3、str-index(string, substring) 返回 substring 子字符串第一次在 stri…...

《元梦之星》赛季更新带来“新”内容,为何却被玩家集体声讨?
前段时间,《元梦之星》迎来了“山海奇遇”赛季的重磅更新,诸多“新”内容的上线吸引了很多玩家们的关注,然而在新版本开启之后没有多,新玩法新时装甚至是游戏中的新改动都引起了不少玩家的不满。 在新赛季开启之后,玩家…...

故障诊断 | 一文解决,CNN-SVM卷积神经网络-支持向量机组合模型的故障诊断(Matlab)
效果一览 文章概述 故障诊断 | 一文解决,CNN-SVM卷积神经网络-支持向量机组合模型的故障诊断(Matlab) 模型描述 卷积神经网络(Convolutional Neural Network,CNN)和支持向量机(Support Vector Machine,SVM)是两种常用的机器学习算法,它们在不同领域和任务中都表现出…...

菜鸡后端的前端学习记录-2
前言 记录一下看视频学习前端的的一些笔记,以前对Html、Js、CSS有一定的基础(都认得,没用过),现在不想从头再来了,学学Vue框架,不定时更新,指不定什么时候就鸽了。。。。 忘了记一下…...

Layui + Echarts 5.0
Layui 怎么整合最新版本的 Echarts 5.0,Echarts 4 升级到 5后,有了很大改变,新的配置项4是无法兼容的,所以想要使用新的功能,都需要升级! 新建一个echarts.js文件 layui.define(function (exports) {// 这…...

linux使用iptables禁用ip
iptables是什么? iptables 是一个强大的开源软件,它是 Linux 系统内核中 netfilter 包过滤框架的一部分,用来实现防火墙功能。iptables 提供了一种灵活的方式来控制和管理进出以及通过 Linux 计算机的网络流量。 前提 我在云服务器上用doc…...

安全防御第五次作业
拓扑图及要求如下: 实验注意点: 先配置双机热备,再来配置安全策略和NAT两台双机热备的防火墙的接口号必须一致双机热备时,请确保vrrp配置的虚拟IP与下面的ip在同一网段如果其中一台防火墙有过配置,最好清空或重启&…...

分库分表原则
分库分表原则 单表数据到达千万级别或者20存储空间 优化已经解决不了问题一 IO瓶颈导致性能问题 拆分策略 垂直分库 以表为依据,根据业务将不同的表拆分到不同库中,有点像微服务 垂直分表 以字段为依据,根据字段属性将不同字段拆分到不同…...

VUE PC端可拖动悬浮按钮
一、实现效果: 二、FloatButton.vue <template><div><div class"sssss"><div class"callback float" mousedown"down" touchstart"down" mousemove"move" touchmove"move" mous…...

opencv0014 索贝尔(sobel)算子
前面学习的滤波器主要是用来模糊图像,今天一起来了解关于边缘识别的滤波吧!嘿嘿 边缘 边缘是像素值发生跃迁的位置,是图像的显著特征之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用。 人眼如…...
Redis简介和数据类型
简介 Redis是完全开源(BSD许可)的内存数据结构存储,是一个高性能的 key-value 数据库,用作数据库、缓存、消息代理和流式处理引擎。 Redis 提供数据结构,例如字符串、哈希、列表、集、带有范围查询的排序集、位图、超…...

Day06-Linux下目录命令讲解及重要文件讲解
Day06-Linux下目录命令讲解及重要文件讲解 1. Linux目录文件1.1 Linux系统目录结构介绍1.1.1 Linux与Windows目录结构对比 1.2 重要的Linux配置文件介绍1.2.1 /etc系统初始化及设置相关重要文件1.2.2 /usr目录的重要知识介绍------应用程序目录1.2.3 /var目录下的路径知识-----…...

睿尔曼超轻量仿人机械臂—外置按钮盒使用说明
睿尔曼RM系列机械臂的控制方式有很多种,包括:示教器、JSON、API等。在此为大家介绍外置按钮盒的使用方法。 按钮盒接线安装 按钮盒外观如下图所示,有:急停、暂停、开始、继续。四个功能按钮。用户可通过这四个按钮来实现对机械臂运…...

PYTHON蓝桥杯——每日一练(简单题)
题目 求123...n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行,包括一个整数,表示123...n的值。 提示 说明:请注意这里的数据规模。 本题直接的想法是直接使用一个循环来累加,然而,当数据规模很大时&…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...