Kubernetes Configmap + Secret

2023-11-15

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: bXktYXBw
  password: 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:  Opaque

Data
====
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-container
      image: nginx
      volumeMounts:
        # name 必须与下面的卷名匹配
        - name: secret-volume
          mountPath: /etc/secret-volume
          readOnly: true
  # Secret 数据通过一个卷暴露给该 Pod 中的容器
  volumes:
    - name: secret-volume
      secret:
        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: 3
  selector:
    matchLabels:
      app: sanchuang-nginx
  template:
    metadata:
      labels:
        app: sanchuang-nginx
    spec:
      containers:
        - name: nginx
          image: "nginx:latest"
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 80
          volumeMounts:
          - name: sanchuang-nginx-config
            mountPath: /etc/nginx/nginx.conf
            subPath: nginx.conf
      volumes:
        - name: sanchuang-nginx-config
          configMap:
            name: sc-nginx-1
            items:
            - key: nginx.conf
              path: 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 Download
  inflating: 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 server
 
    server {
        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 server
 
    server {
        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/tls

Data
====
tls.crt:  3818 bytes
tls.key:  1675 bytes
[root@master conf]# 

实验拓扑图: 

创建svc_pod_secret_configmap.yaml 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes Configmap + Secret 的相关文章

随机推荐

  • 程序员技术面常用知识点

    转自 http blog csdn net qq 15437629 article details 52388685 在这里只做备份 计算机网络 TCP IP 模型 TCP IP协议集的分层实施 为什么要给网络划分层次 1 各层之间相对独立
  • 接口(interface)的实现

    接口 interface 的实现 usb插槽就相当于现实中的接口 其实现实生活和编程相对应的 即程序就是事件 1 java中的接口是怎么实现的呢 接口就是给出一些没有实现的方法 到了某个类要使用的时候就去实现他 语法 interface 接
  • Python多层字典取值

    usr bin python coding utf 8 author Bingo he file get target value py time 2017 12 22 def get target value key dic tmp li
  • 对于vue项目整理增删改查

    模板是来源于官方文档 清除tabledata里的模拟数据先
  • Pytorch相关操作(2)

    PyTroch相关操作 1 21 torch cuda Event 记录GPU的运行时间 start torch cuda Event enable timing True end torch cuda Event enable timin
  • Android Handler 的基本使用

    1 前言 https developer android google cn reference android os Handler html Handler 是 Android 中线程通信的常用方式 文档如是说 A Handler al
  • 【从零开始学c++】——string

    学好STL 一 STL简介 了解 1 什么是STL 2 STL的六大组件 3 STL的缺陷 2 string 1 string的简单了解 如何对stl的查阅 2 string常用接口说明 1 string类 对象常见的构造 2 string
  • Kotlin入门学习(非常详细),从零基础入门到精通,看完这一篇就够了

    文章目录 kotlin的历史 Kotlin的工作原理 语言类型 编译型 解释型 Java的语言类型 Kotlin的运行原理 创建Kotlin项目 语法 变量 变量的声明 基本类型 var和val的本质区别 函数 函数的声明 声明技巧 函数的
  • 找准边界,吃定安全

    创新的资源管理算法 基于会话的全分布式处理流程 山石网科全分布式架构 打破了传统架构的限制 找准边界 吃定安全 往期文章 从访问控制谈起 再看零信任模型 威胁情报加持 泛边界下的全局主动防御体系如何着手 随着 2019 年我国以信息网络等新
  • 连 连 看

    1 案例介绍 连连看是一款曾经非常流行的小游戏 游戏规则 点击选中两个相同的方块 两个选中的方块之间连接线的折点不超过两个 接线由X轴和Y轴的平行线组成 每找出一对 它们就会自动消失 连线不能从尚未消失的图案上经过 把所有的图案全部消除即可
  • C/C++之01背包问题

    问题描述 给定N个物品 每个物品有一个重量W和一个价值V 你有一个能装M重量的背包 问怎么装使得所装价值最大 每个物品只有一个 输入格式 输入的第一行包含两个整数n m 分别表示物品的个数和背包能装重量 以后N行每行两个数Wi和Vi 表示物
  • <form>表单

    1 form表单
  • osgEarth的Rex引擎原理分析(三十六)为什么要删除设置过的垂直水准面

    目标 二十九 中的问题86 椭球体 水平面 应该不是删除 而是信息创建出一个没有垂直水准面的Profile 待继续分析列表 9 earth文件中都有哪些options 九 中问题 10 如何根据earth文件options创建不同的地理信息
  • java gc 次数_浅谈如何减少GC的次数

    GC会stop the world 会暂停程序的执行 带来延迟的代价 所以在开发中 我们不希望GC的次数过多 本文将讨论如何在开发中改善各种细节 从而减少GC的次数 1 对象不用时最好显式置为 Null 一般而言 为 Null 的对象都会被
  • 应用程序无法正常启动0xc000007b请点击确定关闭应用程序

    应用程序无法正常启动0xc000007b怎么办 这是很多用户在电脑的使用过程中会出现的一个问题 究竟出现这个问题的时候 我们要怎么去解决它 让我们的电脑重新恢复正常使用呢 想要解决这个问题就一起来看看0xc000007b错误解决办法吧 0x
  • nRF52832学习记录(一、外设初识之 GPIOTE)

    添加GPIO和GPIOTE寄存器表 对于应用的理解对着寄存器查看会比较明了 这个不管是在哪款芯片上都是如此 2021 9 27 这些年蓝牙5 0的应用越来越多 最近也是想着把以前Enocean的低功耗设备有过的产品 用蓝牙做一套匹配的版本
  • pikachu靶场的两道RCE

    第一道题 ping一个ip并查看当前目录 输入127 0 0 1 点击ping 出来一堆乱码 第一种方法 按win r键 输入regedit 点击确定 即打开注册表编辑器 打开HKEY CURRENT USER项 打开其中的Console项
  • 浅谈Python网络爬虫应对反爬虫的技术对抗

    在当今信息时代 数据是非常宝贵的资源 而作为一名专业的 Python 网络爬虫程序猿 在进行网页数据采集时经常会遭遇到各种针对爬虫行为的阻碍和限制 这就需要我们掌握一些应对反爬机制的技术手段 本文将从不同层面介绍如何使用 Python 进行
  • 概率论与数理统计学习笔记——第三十讲——方差定义和计算公式

    1 方差概念的引入 2 方差 标准差 均方差 的定义及计算公式 3 0 1分布的方差 4 泊松分布的方差 5 均匀分布的方差 6 指数分布的方差 7 方差的应用实例 投资方案评估
  • Kubernetes Configmap + Secret

    Secret是什么 在Kubernetes中 Secret是一种用于存储敏感信息的资源对象 它主要用于保存密码 API令牌 密钥和其他敏感数据 以供容器 Pod或集群中的其他资源使用 Secret有以下特点 安全存储 Secret对象被用于