24.云原生ArgoCD高级之数据加密seale sealed

2024-01-30 20:04

本文主要是介绍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配置只是简单加密存在安全问题,两种解决方案:

  1. secret.yaml不要暴露到项目中,运维人员提前在kubesphere中创建;

secret不跟项目绑定在k8s上不好管理,使用kubesphere中的保密字典能解决这个问题

  1. 暴露出secret.yaml需加密

image.png
参考secret加密管理方案,选择使用Bitnami Sealed Secrets

Bitnami Sealed Secrets介绍

Bitnami Sealed Secrets 是一个用于加密和管理敏感信息的工具,它是基于 Kubernetes 的 Sealed Secrets 控制器。Sealed Secrets 可以安全地存储和传输敏感的密钥、密码、API 密钥等信息,确保这些信息在存储和传输过程中不会被泄露。
下面是 Bitnami Sealed Secrets 的一些主要特点和工作原理:

  1. 加密敏感信息:Bitnami Sealed Secrets 使用公钥/私钥加密方案,将敏感信息加密为 Sealed Secrets 对象。只有持有私钥的人才能解密和读取这些信息。
  2. GitOps 集成:Sealed Secrets 可以与 GitOps 工作流程集成,使敏感信息的管理更加自动化和可追踪。您可以将加密的 Sealed Secrets 对象存储在 Git 存储库中,将其作为代码的一部分进行版本控制和协作。
  3. 密钥管理:Bitnami Sealed Secrets 提供了密钥管理工具,用于生成和管理公钥/私钥对。这些密钥对用于加密和解密 Sealed Secrets 对象。
  4. 控制器和解封工具:Bitnami Sealed Secrets 包含一个 Kubernetes 控制器,用于将 Sealed Secrets 对象解密为原始的 Secret 对象。解封工具可用于在非 Kubernetes 环境中解密 Sealed Secrets 对象。

使用 Bitnami Sealed Secrets,您可以更安全地管理和传输敏感信息,同时保持操作的自动化和可追踪性。它适用于需要在 Kubernetes 环境中存储和使用敏感信息的场景,如密码、API 密钥、数据库凭据等。通过加密和密钥管理,Bitnami Sealed Secrets 提供了一种可靠的方式来保护敏感信息,并确保只有授权的人员能够访问和使用这些信息。

Bitnami Sealed Secrets工作流程

image.png
Bitnami Sealed Secrets 的工作流程如下:

  1. 生成密钥对:首先,您需要生成公钥/私钥对,用于加密和解密敏感信息。这可以通过 Bitnami Sealed Secrets 提供的密钥管理工具完成。生成的公钥将用于加密敏感信息,并将其存储为 Sealed Secrets 对象。
  2. 加密敏感信息:使用生成的公钥,您可以将敏感信息加密为 Sealed Secrets 对象。这可以通过将敏感信息转换为 Kubernetes Secret 对象,然后使用 Sealed Secrets 控制器将其加密为 Sealed Secrets 对象来实现。
  3. 存储 Sealed Secrets 对象:加密后的 Sealed Secrets 对象可以存储在 Git 存储库中,作为代码的一部分进行版本控制和协作。在存储库中,Sealed Secrets 对象将被视为不可读的密文。
  4. 部署 Sealed Secrets 控制器:在 Kubernetes 集群中部署 Sealed Secrets 控制器。该控制器将负责监视并解密存储在 Sealed Secrets 对象中的敏感信息,并将其转换为原始的 Kubernetes Secret 对象。
  5. 解密敏感信息:一旦 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 下载如下文件
image.png

安装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系统组件中会出现如下信息:
image.png
并生成保密字典信息:
image.png
方式2:在kubesphere中通过应用仓库部署
image.png
image.png
image.png

安装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 的一些主要特点和用法:

  1. 生成 Sealed Secrets 对象:使用 Kubeseal,您可以从现有的 Kubernetes Secret 对象生成 Sealed Secrets 对象。这可以通过运行命令行工具来完成,工具会将 Secret 对象的内容加密并生成相应的 Sealed Secrets 对象。
  2. 加密敏感信息:Kubeseal 使用 Sealed Secrets 控制器的公钥来加密敏感信息。在生成 Sealed Secrets 对象时,Kubeseal 会自动获取集群中的 Sealed Secrets 控制器的公钥,并使用该公钥对敏感信息进行加密。
  3. 密钥管理:Kubeseal 可以与密钥管理工具集成,用于生成和管理 Sealed Secrets 控制器所需的公钥/私钥对。这些密钥对用于加密和解密 Sealed Secrets 对象。
  4. 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

  1. 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明文内容如下:
image.png

  1. 加密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

  1. 查看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
  1. 替换argocd-in-action测试项目kustomize下的secret.yaml为secret-sealed.yaml

image.png

创建argocd应用测试

image.png
发现SealedSecret创建失败,点击进入查看具体原因,提示资源已经存在
image.png
修改secret-sealed.yaml下db-connection名称,删除flask-demo名称空间,重新同步:
image.png
提示没有秘钥可以解密,查看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)

备份公钥私钥容灾处理

  1. 备份私钥
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 的文件中。这个文件可能包含密钥或其他敏感信息,用于后续操作或配置。

  1. 模拟灾难:卸载sealed-secrets-controller
kubectl delete -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.25.0/controller.yaml

上述操作不会删除secrets

  1. 恢复
# 先导入私钥
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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661383

相关文章

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转