Kubernetes Configmap + Secret

Secret是什么?

在Kubernetes中,Secret是一种用于存储敏感信息的资源对象。它主要用于保存密码、API令牌、密钥和其他敏感数据,以供容器、Pod或集群中的其他资源使用。

Secret有以下特点:

  1. 安全存储:Secret对象被用于安全地存储敏感信息,这些信息通常不适合以明文形式出现在Pod的配置文件或环境变量中。

  2. 多种类型:Kubernetes支持不同类型的Secret,包括:

    • Opaque:用于存储任意二进制数据,通常用于存储密码、证书等。
    • Docker-registry:用于存储Docker镜像仓库的凭据。
    • Service account token:用于自动创建与Service Account关联的Secret。
  3. 与Volume和环境变量结合使用:Secret可以将敏感信息挂载为Volume,以便Pod中的容器可以访问这些信息。也可以将Secret的内容注入到Pod的环境变量中。

  4. 自动编码/解码:Secret对象会对存储的数据进行Base64编码,但并不提供加密功能。因此,它并不是用于加密数据的最佳选择,而是用于基本的敏感信息存储。

  5. 不可修改:一旦创建,Secret对象的内容不能被修改。如果需要更新Secret,通常需要创建一个新的Secret,并重新部署使用它的Pod。

Secret是用于维护Kubernetes集群中应用程序的安全性和可配置性的关键工具之一。通过使用Secret,可以将敏感信息集中存储、管理和分发给需要访问这些信息的Pod和容器,同时避免了在配置文件或环境变量中硬编码敏感数据的风险。

使用 Secret 安全地分发凭证

参考文档:使用 Secret 安全地分发凭证 | Kubernetes

实验拓扑图:

1、创建 Secret:secret.yaml(这里是一个配置文件,可以用来创建存有用户名和密码的 Secret:)

apiVersion: v1
kind: Secret
metadata:name: test-secret
data:username: bXktYXBwpassword: Mzk1MjgkdmRnN0pi

2、运行secret.yaml从而创建Pod

[root@master secrect]# kubectl apply -f secret.yaml
secret/test-secret created

3、查看 Secret 相关信息:

[root@master secrect]# kubectl get secret test-secret
NAME          TYPE     DATA   AGE
test-secret   Opaque   2      30s
[root@master secrect]# 

查看 Secret 相关的更多详细信息:

kubectl describe secret test-secret

输出:

[root@master secrect]# kubectl describe secret test-secret
Name:         test-secret
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  OpaqueData
====
password:  12 bytes
username:  6 bytes
[root@master secrect]# 

4、直接用 kubectl 创建 Secret(可以将之前的第一步和第二部浓缩在一起,十分常用)

使用 kubectl create secret 命令直接创建 Secret。例如:

kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'

代码解释:

这段`kubectl`命令用于在Kubernetes中创建一个叫做`test-secret`的通用(generic)Secret对象,该对象包含两个键值对。以下是命令的解释:- `kubectl create secret generic test-secret`:这部分指定了要创建一个名为`test-secret`的通用Secret对象。通用Secret是一种存储敏感信息的Secret类型,它可以包含多个键值对。- `--from-literal='username=my-app'`:这是一个标志,表示从文本字面值创建Secret中的一个键值对。在这里,我们创建了一个键值对,键是`username`,值是`my-app`。这意味着在`test-secret` Secret对象中将包含一个名为`username`的键,其值为`my-app`。- `--from-literal='password=39528$vdg7Jb'`:类似地,这也是一个标志,用于从文本字面值创建Secret中的另一个键值对。在这里,我们创建了一个键值对,键是`password`,值是`39528$vdg7Jb`。这将在`test-secret` Secret对象中包含一个名为`password`的键,其值为`39528$vdg7Jb`。总之,这个命令创建了一个通用的Secret对象`test-secret`,其中包含两个键值对,分别是`username`和`password`,用于存储应用程序或服务所需的敏感信息。这个Secret对象可以在Kubernetes中的Pod中挂载为Volume或注入到Pod的环境变量中,以供应用程序使用。

5、创建一个可以通过卷访问 Secret 数据的 Pod(创建secret-pod.yaml 文件)

[root@master secrect]# cat secret-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: secret-test-pod
spec:containers:- name: test-containerimage: nginxvolumeMounts:# name 必须与下面的卷名匹配- name: secret-volumemountPath: /etc/secret-volumereadOnly: true# Secret 数据通过一个卷暴露给该 Pod 中的容器volumes:- name: secret-volumesecret:secretName: test-secret
[root@master secrect]# 

代码详解:

这个YAML文件描述了一个Kubernetes Pod,名为`secret-test-pod`,该Pod使用了一个Secret来挂载敏感数据到容器中。以下是代码的详细解释:- `apiVersion: v1` 和 `kind: Pod`:这两行指定了创建一个Pod资源。- `metadata`:这个部分包含了Pod的元数据,其中`name`字段指定了Pod的名称为`secret-test-pod`。- `spec`:这是Pod的规格部分,包含了容器和卷的配置。- `containers`:这个列表包含了Pod中运行的容器的配置。在这里,有一个名为`test-container`的容器,它使用了`nginx`镜像。- `volumeMounts`:这个字段指定了要挂载到容器中的卷的配置。在这里,我们有一个名为`secret-volume`的卷,它被挂载到容器的`/etc/secret-volume`路径下,并设置为只读。- `volumes`:这个字段定义了Pod中的卷。在这里,我们定义了一个名为`secret-volume`的卷,它使用了一个Secret来提供数据。- `secret`:在`volumes`下的`secret`字段指定了卷的类型是Secret,并且使用了一个叫做`test-secret`的Secret。这意味着Pod中的容器将能够访问`test-secret`中的敏感数据,并且该数据将被挂载到容器的`/etc/secret-volume`路径下。总之,这个YAML文件描述了一个Pod,该Pod包含一个运行`nginx`容器,并且通过一个名为`secret-volume`的卷将一个Secret对象`test-secret`中的数据挂载到容器内部。这使得容器能够访问`test-secret`中的敏感信息,而且这些信息只能以只读方式被容器访问。

6、运行secret-pod.yaml 文件创建 Pod:

[root@master secrect]# kubectl apply -f secret-pod.yaml 
pod/secret-test-pod created
[root@master secrect]# 

确认 Pod 正在运行:

[root@master secrect]# kubectl get pod -o wide
NAME                                READY   STATUS              RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
redis                               1/1     Running             0          80m     10.244.1.18   node1   <none>           <none>
secret-test-pod                     1/1     Running             0          2m14s   10.244.1.19   node1   <none>           <none>
test                                1/1     Running             0          29h     10.244.2.7    node2   <none>           <none>
[root@master secrect]# 

7、进入secret-test-pod这个Pod 中的运行的容器:

[root@master secrect]# kubectl exec -i -t secret-test-pod -- /bin/bash
root@secret-test-pod:/# 

8、查看卷所在地:(Secret 数据通过挂载在 /etc/secret-volume 目录下的卷暴露在容器中。)

root@secret-test-pod:/# cd /etc/secret-volume/
root@secret-test-pod:/etc/secret-volume# ls
password  username
root@secret-test-pod:/etc/secret-volume# 

9、在 Shell 中,显示 username 和 password 文件的内容:

root@secret-test-pod:/etc/secret-volume# echo "$(cat password)" 
39528$vdg7Jb
root@secret-test-pod:/etc/secret-volume# echo "$(cat username)"
my-app
root@secret-test-pod:/etc/secret-volume# 

最后实验证明我们使用Secret将我们的用户名和密码都通过卷挂载到了secret-test-pod这个容器上,说明了Secret和Configmap都具有相似的功能:(Secret可以将敏感信息挂载为Volume,以便Pod中的容器可以访问这些信息)

案例:使用Secret + Configmap + nginx服务,实现nginx的HTTPS的功能

实验思想:

通过启动nginx的pod,使用configmap投射nginx.conf配置文件到pod里面

使用secret然后投射SSL证书(https证书)到Pod里,让pod支持https协议的访问

1、准备SSL证书(用于验证HTTPS协议)和 nginx.conf配置文件

nginx.conf文件

# claylpf test
user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}

2、使用configmap投射nginx.conf配置文件到pod里的nginx容器里去

2.1、将nginx.conf的内容投射到configmap上去

[root@master nginx]#  kubectl create configmap sc-nginx-1 --from-file=nginx.conf
configmap/sc-nginx-1 created

查看详细内容:

[root@master nginx]# kubectl get cm
NAME                   DATA   AGE
example-redis-config   1      9h
kube-root-ca.crt       1      41h
sc-nginx-1             1      56s
[root@master nginx]# 

3、配置nginx_secret.yaml 

[root@master nginx]# cat nginx_secret.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: sanchuang-nginx
spec:replicas: 3selector:matchLabels:app: sanchuang-nginxtemplate:metadata:labels:app: sanchuang-nginxspec:containers:- name: nginximage: "nginx:latest"imagePullPolicy: IfNotPresentports:- containerPort: 80volumeMounts:- name: sanchuang-nginx-configmountPath: /etc/nginx/nginx.confsubPath: nginx.confvolumes:- name: sanchuang-nginx-configconfigMap:name: sc-nginx-1items:- key: nginx.confpath: nginx.conf              

创建Pod启动secret

[root@master nginx]# kubectl get pod -o wide
NAME                                READY   STATUS              RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
sanchuang-nginx-77cdd449c-fs6s6     1/1     Running             0          2m39s   10.244.3.11   node3   <none>           <none>
sanchuang-nginx-77cdd449c-ht2hr     1/1     Running             0          2m39s   10.244.1.20   node1   <none>           <none>
sanchuang-nginx-77cdd449c-zxx2c     1/1     Running             0          2m39s   10.244.2.10   node2   <none>           <none>
secret-test-pod                     1/1     Running             0          9h      10.244.1.19   node1   <none>           <none>
test                                1/1     Running             0          38h     10.244.2.7    node2   <none>           <none>
[root@master nginx]# 

然后去查看容器里启动的nginx是否有4个worker进程

root@sanchuang-nginx-77cdd449c-fs6s6:/etc/nginx# cat nginx.conf 
worker_processes  4;
events {worker_connections  2048;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen  80;server_name localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}
root@sanchuang-nginx-77cdd449c-fs6s6:/etc/nginx# 

详细请看:(137条消息) 使用nginx搭建http和https环境_nginx搭建http服务器_Claylpf的博客-CSDN博客

将证书传给master

下载unzip进行解压

[root@master conf]# yum install unzip -y

解压:

[root@master conf]# unzip 9581058_claylpf.xyz_nginx.zip 
Archive:  9581058_claylpf.xyz_nginx.zip
Aliyun Certificate Downloadinflating: claylpf.xyz.pem         inflating: claylpf.xyz.key         

nginx.conf配置文件也需要提前上传到服务器之中

[root@master conf]# cat nginx.conf#user  nobody;
worker_processes  4;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  2048;
}#HTTP协议的配置
http {include       mime.types;default_type  application/octet-stream;#(定义访问日志的格式  日志保存在/usr/local/scnginx/logs/access.log文件中)log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;   #--》日志保存的地址 sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;      #--》65秒后用户和web服务器建立的连接就会断开、 保持连接65秒的时间、 连接的超时时间#gzip  on; limit_conn_zone $binary_remote_addr  zone=addr:10m;    #创建一个连接区域(开辟了一个名叫addr的内存空间、像一个字典)limit_req_zone $binary_remote_addr  zone=one:10m rate=1r/s;    #创建一个连接区域(开辟了一个名叫one的内存空间、像一个字典)、每一秒产生1个可以访问的请求server {listen       80;server_name  www.claylpf.xyz;           #目的是直接从http协议跳转到https协议去return       301        https://www.claylpf.xyz;  #永久重定向}server {listen       80;server_name  www.feng.com;      #可以自己定义域名access_log  logs/feng.com.access.log  main;limit_rate_after 100k;  #下载速度达到100k每秒的时候、进行限制   limit_rate 10k;         #限制每秒10k的速度limit_req zone=one burst=5;  #同一时间同一ip最多5人同时访问 峰值是5 每一秒通过one的设定、产生一个空位 1r/s  location / {root   html/feng;index  index.html index.htm;}error_page  404              /404.html;   #无法找到error_page   500 502 503 504  /50x.html;  #一般是nginx内部出现问题才会出现的提示location = /50x.html {root   html;}location = /info {stub_status;    #返回你的nginx的状态统计信息    #access_log off; #在访问的时候不计入访问日志里面去     auth_basic      "sanchuang website";auth_basic_user_file htpasswd;#allow  172.20.10.2;    #允许172.20.10.2的ip地址访问#deny   all;            #拒绝所有用户访问}}}# HTTPS serverserver {listen       443 ssl;server_name  www.claylpf.xyz;     #证书上对应的域名ssl_certificate      claylpf.xyz.pem;   #自己在阿里云上申请的免费的CA证书ssl_certificate_key  claylpf.xyz.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location / {root   html;index  index.html index.htm;}}
}
[root@master conf]# 

2、根据nginx.conf的内容生成configmap(在存放nginx.conf目录下/usr/local/scnginx66/conf)

查看效果

[root@master conf]# kubectl get cm
NAME                   DATA   AGE
example-redis-config   1      8h
kube-root-ca.crt       1      40h
nginxconfigmap         1      3m10s
[root@master conf]# 

查看详细内容

[root@master conf]# kubectl describe cm nginxconfigmap
Name:         nginxconfigmap
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
nginx.conf:
----#user  nobody;
worker_processes  4;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  2048;
}#HTTP协议的配置
http {include       mime.types;default_type  application/octet-stream;#(定义访问日志的格式  日志保存在/usr/local/scnginx/logs/access.log文件中)log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;   #--》日志保存的地址 sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;      #--》65秒后用户和web服务器建立的连接就会断开、 保持连接65秒的时间、 连接的超时时间#gzip  on; limit_conn_zone $binary_remote_addr  zone=addr:10m;    #创建一个连接区域(开辟了一个名叫addr的内存空间、像一个字典)limit_req_zone $binary_remote_addr  zone=one:10m rate=1r/s;    #创建一个连接区域(开辟了一个名叫one的内存空间、像一个字典)、每一秒产生1个可以访问的请求server {listen       80;server_name  www.claylpf.xyz;           #目的是直接从http协议跳转到https协议去return       301        https://www.claylpf.xyz;  #永久重定向}server {listen       80;server_name  www.feng.com;      #可以自己定义域名access_log  logs/feng.com.access.log  main;limit_rate_after 100k;  #下载速度达到100k每秒的时候、进行限制   limit_rate 10k;         #限制每秒10k的速度limit_req zone=one burst=5;  #同一时间同一ip最多5人同时访问 峰值是5 每一秒通过one的设定、产生一个空位 1r/s  location / {root   html/feng;index  index.html index.htm;}error_page  404              /404.html;   #无法找到error_page   500 502 503 504  /50x.html;  #一般是nginx内部出现问题才会出现的提示location = /50x.html {root   html;}location = /info {stub_status;    #返回你的nginx的状态统计信息    #access_log off; #在访问的时候不计入访问日志里面去     auth_basic      "sanchuang website";auth_basic_user_file htpasswd;#allow  172.20.10.2;    #允许172.20.10.2的ip地址访问#deny   all;            #拒绝所有用户访问}}}# HTTPS serverserver {listen       443 ssl;server_name  www.claylpf.xyz;     #证书上对应的域名ssl_certificate      claylpf.xyz.pem;   #自己在阿里云上申请的免费的CA证书ssl_certificate_key  claylpf.xyz.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location / {root   html;index  index.html index.htm;}}
}BinaryData
====Events:  <none>
[root@master conf]# 

3、根据证书(文件)创建secret

[root@master conf]# kubectl create secret tls nginxsecret --key claylpf.xyz.key --cert claylpf.xyz.pem
secret/nginxsecret created
[root@master conf]# 

查看效果:

[root@master conf]# kubectl describe secret nginxsecret
Name:         nginxsecret
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  kubernetes.io/tlsData
====
tls.crt:  3818 bytes
tls.key:  1675 bytes
[root@master conf]# 

实验拓扑图: 

创建svc_pod_secret_configmap.yaml 

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

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

相关文章

【面试必刷TOP101】合并k个已排序的链表 判断链表中是否有环

目录 题目&#xff1a;合并k个已排序的链表_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;判断链表中是否有环_牛客题霸_牛客网 (nowcoder.com) 题目的接口…

公司电脑文件加密防泄密软件系统——「天锐绿盾」

天锐绿盾是一款功能强大的公司电脑文件加密防泄密软件系统&#xff0c;旨在保护企业的知识产权和商业机密。 PC访问地址&#xff1a;http://985.so/2y2n9 它具有以下几个主要特点&#xff1a; 文件加密&#xff1a;天锐绿盾会对存储在公司电脑上的所有敏感文件进行自动加密&am…

JavaScript学习笔记02

JavaScript笔记02 数据类型详解 字符串 在 JavaScript 中正常的字符串都使用单引号 或者双引号" "包裹&#xff1a;例&#xff1a; 转义字符 在 JavaScript 字符串中也可用使用转义字符&#xff08;参考&#xff1a;详解转义字符&#xff09;&#xff1a;例&…

百度收录和权重怎么提升-网站如何获得百度权重

你是否一直苦恼于网站权重的低迷&#xff1f;不知道如何开始提升网站权重&#xff0c;缺乏优质内容更新网站。不清楚如何进行关键词优化来提升网站排名和权重。SEO是一个需要持续投入时间和资源的过程。每个网站的情况都会有所不同&#xff0c;因此所花费的时间也会有所差异。然…

android studio 找不到设备

问题描述&#xff1a; 当android studio 没有打开&#xff0c; 执行adb devices 可以查看到设备&#xff0c; 当android studio 打开&#xff0c; 执行adb devices 可以查看不到设备&#xff0c; android studio 设备管理器中也没有设备 解决方法&#xff1a; 关闭android s…

数据库_之常用API的使用

数据库_之电商API MySQL C API 使用&#xff08;基本函数&#xff09; Mysql C API函数详解 MySQL的常用API 一个常用的程序调用MySQL数据库的时候通常都会调用以下API,下面来逐个分析. mysql_init() //函数原型 MYSQL *STDCALL mysql_init(MYSQL *mysql);这个API主要是用来分…

竞赛 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖&#xff0c;适合作为竞赛课…

数据分析三剑客之Pandas

1.引入 前面一篇文章我们介绍了numpy&#xff0c;但numpy的特长并不是在于数据处理&#xff0c;而是在它能非常方便地实现科学计算&#xff0c;所以我们日常对数据进行处理时用的numpy情况并不是很多&#xff0c;我们需要处理的数据一般都是带有列标签和index索引的&#xff0…

uni-app:单页面的页面切换

效果 代码 <template><view><view class"tab-bar"><text class"tab" :class"{ active: activeTab 0 }" click"changeTab(0)">页面1</text><text class"tab" :class"{ active: acti…

解锁网页开发的力量:深入探讨 JavaScript 编程

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 JavaScript 是现代网页开…

SpringBoot 整合 Websocket 通信demo (附浏览器聊天窗口)

1. 依赖 <!-- SpringBoot WebSocket --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>2. 自动注册配置类 import org.springframework.context…

巨人互动|Google海外户Google排名算法机制

谷歌是目前最流行的搜索引擎之一&#xff0c;它的排名算法机制是谷歌搜索引擎的核心。谷歌的排名算法机制可以分为两个部分&#xff1a;计算网页相关度和排序结果。 一、计算网页相关度 谷歌通过计算每个页面的相关度来确定搜索结果的优先级。相关度是根据页面上的关键词、图…

【Java从入门到精通】这也许就是Java火热的原因吧!

前言&#xff1a;Java是一种高级的、面向对象的、可跨平台的程序设计语言。Java根据技术类别可划分为以下几类&#xff1a;JavaSE&#xff08;Standard Edition&#xff0c;标准版&#xff09;&#xff1a;支持面向桌面、嵌入式和移动设备的应用程序开发&#xff1b;JavaEE&…

input子系统框架、外设驱动开发

一、input子系统基本框架 Linux内核为了两个目的&#xff1a; 简化纯输入类外设&#xff08;如&#xff1a;键盘、鼠标、游戏杆、轨迹球、触摸屏。。。等等&#xff09;的驱动开发统一输入类外设产生的数据格式&#xff08;struct input_event&#xff09;&#xff0c;更加方…

功率放大器的作用有哪些

功率放大器是电子设备中常见的一个组件&#xff0c;其作用是将输入信号的能量放大到更高的功率级别&#xff0c;以用于驱动高功率负载或者提供足够的功率来满足特定需求。功率放大器在各种应用领域中发挥着重要作用&#xff0c;下面将详细介绍功率放大器的作用与应用。 图&…

亚信科技AntDB数据库携“U8C+AntDB联合产品”亮相“2023全球商业创新大会”,开启生态合作新篇章

8月18-19日&#xff0c;近万人齐聚上海国家会展中心&#xff0c;带着对数字化、数智化趋势和热点的关注&#xff0c;以满腹热情投身到以“数据驱动 智能运营”为主题的“2023全球商业创新大会”&#xff0c;共商新技术条件下企业信息化出现的新课题、新挑战&#xff0c;共享数智…

Linux配置成代理服务器

Linux配置成代理服务器 什么是代理服务器 把Linux配置成代理服务器 开放的代理服务器 升级需要账号密码的代理服务器 Linux系统使用代理服务器 临时通过代理访问 永久通过代理访问 Windows系统使用代理服务器 什么是代理服务器 代理服务器&#xff08;Proxy Server&am…

【LeetCode-中等题】 454. 四数相加 II

文章目录 题目方法一&#xff1a;哈希表 题目 方法一&#xff1a;哈希表 哈希表记录前两个数组的和以及出现次数&#xff0c;然后记录后面两个数组的和&#xff0c;成功将四数之和转换为两数之和 因为本题特殊在和是为0 的 所以后面的两个数组之和取反 如果能在map的key中存在…

SpringMVC系列(六)之JSON数据返回以及异常处理机制

目录 前言 一. JSON概述 二. JSON数据返回 1. 导入pom依赖 2. 添加配置文件&#xff08;spring-mvc.xml&#xff09; 3. ResponseBody注解使用 4. 效果展示 5. Jackson介绍 三. 全局异常处理 1. 为什么要全局异常处理 2. 异常处理思路 3. 异常处理方式一 4. 异常处…

windows下安装redis扩展库

1.根据PHP版本号&#xff0c;编译器版本号和CPU架构 选择php_redis和php_igbinary文件(如果是选择线程的情况下需要再去配置php5ts.dll) windows.php.net - /downloads/pecl/releases/redis/ windows.php.net - /downloads/pecl/releases/igbinary/ php_igbinary-3.1.2-7.2-…