社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

docker资源分配 Cgroup和安全通信 TLS

慧日破重昏,芳心困落日 • 4 年前 • 369 次点击  

1:docker资源分配 Cgroup [CPU 内存 I/O(单位时间内的吞吐量 单位时间内的读写速度)]

为什么要做资源分配 ?

容器----虚拟机 区别
虚拟机在创建的时候已经做了资源分配,(虚拟CPU,虚拟内存,虚拟磁盘等)

容器是共享内核资源的,不做Cgroup会存在重大安全隐患(面试时,参照:往年的监控数据情况,进行资源分配)

资源分配

Cgroup资源配置方法

docker通过Cgroup来控制容器是使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制
Control Group的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如CPU、内存、磁盘IO等)的机制,被LXC、docker等很多项目用于实现进程资源控制,Cgroup子系统,有以下几大子系统实现:

子系统:

	blkio:设置西限制每个块设备的输入输出控制,例如:磁盘、光盘以及USB等。
	CPU:使用调度程序为cgroup任务提供CPU的访问。
	cpuacct:产生cgroup任务的CPU资源报告。
	cpuset:如果是多核心的CPU,这个子系统会为cgroup任务分配单独的CPU和内存。
	devices:允许或拒绝cgroup任务对设备的访问。
	freezer:暂停和恢复cgroup任务。
	memory:设置每个cgroup的内存限制以及产生内存资源报告。
	net_cls:标记每个网络包以提供cgroup方便使用。
	ns:命名子空间系统
	perf_event:增加了对每个group的监测跟踪的能力,可以监测属于某个特定的group的所有线程以及运行在特定CPU上的线程。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

利用stress压力测试工具来测试CPU和内存使用状况

清空防火墙规则、关闭核心防护
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0

使用Dockerfile来创建一个基于Centos的stress工具镜像[root@localhost ~]# mkdir /opt/stress
[root@localhost ~]# vim /opt/stress/Dockerfile
FROM centos:7
MAINTAINER
RUN yum install -y wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install -y stress

[root@client ~]# cd /opt/stress
[root@client stress]# docker build -t centos:stress .

[root@client stress]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos stress 5a77e23ca0d6 12 seconds ago 426MB

使用如下命令创建容器,命令中的–cpu-shares参数值不能保证可以获得1个vcpu或者多个GHz的CPU资源,他仅是一个弹性的加权值。
docker run -itd --cpu-shares 100 centos:stress

说明:默认情况下,每个Docker容器的CPU份额都是1024,单独一个容器的份额是没有意义的,只有在同时运行多个容器时,容器的CPU加权的效果才能体现。
Cgroup只在容器分配的资源紧缺时,即在需要使用资源进行限制时,才会生效,因此无法单纯根据某个容器的CPU份额来确定有多少CPU资源,CPU资源分配,结果取决于同时运行的其他容器的CPU分配和容器中进程运行情况。
可以通过cpu share 设置容器使用CPU的优先级,比如启动了两个容器及运行查看CPU使用百分比。
[root@client stress]# docker run -itd --cpu-shares 100 centos:stress//容器产生10个子函数进程

df937d7ab7728a1306833a19444c5d7a7ed1e108859300bc8319f8fd2597b238

[root@client stress]# docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10
6fa79759df08eba01fc1d23b59c7801409df198e0bff4fa9a84f550734e2b3e8
[root@client stress]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fa79759df08 centos:stress “stress -c 10” 2 seconds ago Up 1 second cpu512
[root@client stress]# docker exec -it 6fa79759df08 bash //进入容器使用top命令查看CPU使用情况
[root@6fa79759df08 /]# top

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q95ja6wl-1601193134575)(C:\Users\hu\AppData\Roaming\Typora\typora-user-images\1600932465759.png)]

//再开启一个容器做比较[root@client ~]# docker run -itd --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10
1b23b00909e82576293d325937e28f4386ffa24fa39127ff41d54508470d6766
[root@client ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b23b00909e8 centos:stress “stress -c 10” 2 seconds ago Up 1 second cpu1024
6fa79759df08 centos:stress “stress -c 10” 2 minutes ago Up 2 minutes cpu512

[root@client ~]# docker exec -it 1b23b00909e8 bash

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-espCSapF-1601193134577)(C:\Users\hu\AppData\Roaming\Typora\typora-user-images\1600932538208.png)]

//进入容器使用top命令对比两个容器的%CPU比例是1:2

CPU周期限制

Docker提供了 --cpu-period --cpu-quota 两个参数控制容器可以分配的CPU时钟周期。
–cpu-period是用来指定容器对CPU的使用要在多长时间内做一次重新分配
–cpu-quota是用来指定在这个周期内,最多可以有多长时间来跑这个容器。(与–cpu-period不同的是,这种配置时指定一个绝对值,容器多CPU资源的使用绝对不会超过配置的值)
cpu-perlod和cpu-quota的单位为微秒(us) . epu-perlod 的最小值为1000微秒,最大值为1秒(10^6μs) 。默认值为0.1秒(100000 μ5)
cpu-quota的值默认为-1,表示不做控制。cpu-period 和cpu-quota参数一般联合使用。
例如:容器进程需要每1移使用单个CPU的0.2秒时间,可以将cqpu-period设置为100000 (即1秒)。cpu-quota设置为20000 (0.2秒) 。
当然,在多核情况下,如果允许容器进程完全占用两个CPU,则可以将cpu-period设置为100000 (即0.1秒),cpu-quota设置为200000 (0.2

[root@client stress]# docker run -tid --cpu-period 100000 --cpu-quota 200000 centos:stress
5fa301ae0a422ba23fa0cdeeb88760f1b53376479b344fff8549a405e2aadb30
[root@client stress]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fa301ae0a42 centos:stress “/bin/bash” 2 seconds ago Up Less than a second objective_spence

[root@client stress]# docker exec -it 5fa301ae0a42 bash

[root@5fa301ae0a42 /]# cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000
[root@5fa301ae0a42 /]# cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
200000

CPU Core控制

对于多核CPU的服务器,docker还可以控制容器运行使用哪些CPU内核,即使用–cpu-cpus参数
这对具有多CPU的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置

执行以下命令需要宿主机为双核,表示创建的容器只能用0、1两个内核(CPU0、CPU1)。最终生成的cgroup的CPU内核配置如下:[root@localhost stress]# docker run -tid --name cpu1 --cpuset-cpus 0-1 centos:stress
1694023f3400f7366137d2bde7b13b20a457f1a68cb14301be034e3b99fd9da0

[root@localhost stress]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1694023f3400 centos:stress “/bin/bash” 25 seconds ago Up 24 seconds cpu1

[root@localhost stress]# docker exec -it 1694023f3400 bash

[root@1694023f3400 /]# cat /sys/fs/cgroup/cpuset/cpuset.cpus
0-1

[root@localhost stress]# docker exec 1694023f3400 taskset -c -p 1
pid 1’s current affinity list: 0,1

通过下面指令可以看到容器中进程与CPU内核的绑定关系,达到绑定CPU内核的目的
docker exec 1694023f3400 taskset -c -p 1 //容器内部第一个进程号皮带为1被绑定到制定CPU上运行

CPU配额控制参数的混合使用
通过cpuset-cpus参数指定容器A使用CPU内核0,容器B只是用CPU内核1.
在主机上只有这两个容器使用对应CPU内核的情况,它们各自占用全部的内核资源,cpu-shares 没有明显效果。
cpuset-cpus、cpuset-mems 参数只在多核、多内存节点上的服务器上有效,并且必须与实际的物理配置匹配,否则也无法达到资源控制的目的。
在系统具有多个CPU内核的情况下,需要通过cpuset-cpus参数为设置容器CPU内核才能方便地进行测试。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jshaj0ZU-1601193134579)(C:\Users\hu\AppData\Roaming\Typora\typora-user-images\1601102669497.png)]

//宿主系统修改为4核心cpu[root@localhost stress]# docker run -tid --name cpu3 --cpuset-cpus 1 --cpu-shares 512 centos:stress stress -c 1
3b139ebde227f86825ca9031702c1356ac18214e896be03966139500a18f5e74

[root@localhost stress]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b139ebde227 centos:stress “stress -c 1” 36 seconds ago Up 34 seconds cpu3

[root@localhost stress]# docker exec -it 3b139ebde227 bash
[root@3b139ebde227 /]# exit
exit

[root@localhost stress]# top //按1查看每个核心的占用

top - 14:49:06 up 1:53, 4 users, load average: 0.97, 0.51, 0.24
Tasks: 244 total, 2 running, 242 sleeping, 0 stopped, 0 zombie%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 3861512 total, 571580 free, 935092 used, 2354840 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2466740 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
82110 root 20 0 7312 100 0 R 100.0 0.0 3:28.55 stress

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7qs8o4us-1601193134581)(C:\Users\hu\AppData\Roaming\Typora\typora-user-images\1601102909730.png)]

[root@localhost stress]# docker run -tid --name cpu4 --cpuset-cpus 3 --cpu-shares 1024 centos:stress stress -c 1
04cce252457166347af6cb6d9110e6afe531116e783536885e306400fdf7c575

[root@localhost stress]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04cce2524571 centos:stress “stress -c 1” 36 seconds ago Up 35 seconds cpu4

[root@localhost stress]# docker exec -it 04cce2524571 bash

[root@localhost stress]# docker exec -it 04cce2524571 bash
[root@04cce2524571 /]# exit
exit

top - 14:58:16 up 2:02, 4 users, load average: 2.00, 1.61, 0.89
Tasks: 246 total, 3 running, 243 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3861512 total, 560632 free, 944092 used, 2356788 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2456172 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
83053 root 20 0 7312 100 0 R 100.0 0.0 5:48.98 stress
82110 root 20 0 7312 100 0 R 99.7 0.0 12:38.53 stress

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pkPyUdl1-1601193134583)(C:\Users\hu\AppData\Roaming\Typora\typora-user-images\1601103494949.png)]

总结:上面的centos:stress镜像安装了stress工具,用来测试CPU和内存的负载,通过在容器上分别执行stress -c 1命令,将会给系统一个随机负载,产生一个进程,这个进程反复不停的计算由rand()产生随机数的平方根,直到资源耗尽。
观察到宿主机上的CPU使用率,第三个内核的使用率接近100%,并且一批进程的 PU使用率明显存在2:1的使用比例的对比。

内存限额

与操作系统类似,容器可使用的内存包括两部分:物理内存和Swap.
Docker通过下面两组参数来控制容器内存的使用量。
-m或-memory:设置内存的使用限额,例如100M、1024M。
–memory-swap:设置内存+ swap的使用限额。

执行如下命令允许该容器最多使用200M的内存和300M的swap。
[root@localhost stress]# docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
–vm 1:启动1个内存工作线程。
–vm-bytes 280M:每个线程分配280M内存。
默认情况下,容器可以使用主机上的所有空闲内存。
与CPU的cgroups配置类似,Docker 会自动为容器在目录/sys/fs/cgroup/memory/docker/<容器的完整长ID>中创建相应cgroup配置文件
如果让工作线程分配的内存超过300M,分配的内存超过限额,stress 线程报错,容器退出。

[root@localhost ~]# docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 310M
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: dbug: [1] using backoff sleep of 3000us
stress: dbug: [1] --> hogvm worker 1 [6] forked
stress: dbug: [6] allocating 325058560 bytes …
stress: dbug: [6] touching bytes in strides of 4096 bytes …
stress: FAIL: [1] (416) <-- worker 6 got signal 9
stress: WARN: [1] (418) now reaping child worker processes
stress: FAIL: [1] (422) kill error: No such process
stress: FAIL: [1] (452) failed run completed in 0s

Block IO的限制

默认情况下,所有容器能平等地读写磁盘,可以通过设置–block-weight参数来改变容器block IO的优先级。
–block-weight与–cpu-shares类似,设置的是相对权重值,默认为500。

下面的例子中,容器A读写磁盘的带宽是容器B的两倍[root@localhost stress]# docker run -it --name container_A --blkio-weight 600 centos:stress
[root@3b218714f509 /]# cat /sys/fs/cgroup/blkio/blkio.weight
600

[root@localhost stress]# docker run -it --name container_B --blkio-weight 300 centos:stress
[root@a49df7e2fceb /]# cat /sys/fs/cgroup/blkio/blkio.weight
300

bps和iops的限制

bps是byte per second,每秒读写的数据量。
iops是io per second,每秒10的次数。

可通过以下参数控制容器的bps和iops:
– device read-bps,限制读某个设备的bps。
– device-write-bps,限制写某个设备的bps。
– device- read-iops,限制读某个设备的iops。
– device-write-iops,限制写某个设备的iops。

下面的示例是限制容器写/dev/sda的速率为5 MB/s。
[root@83a409738e11 /]# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct //可以按Ctrl+c中断查看
^C38+0 records in
38+0 records out
39845888 bytes (40 MB) copied, 7.60984 s, 5.2 MB/s

通过dd命令测试在容器中写磁盘的速度。因为容器的文件系统是在host /dev/sda上的,
在容器中写文件相当于对host /dev/sda进行写操作.另外,oflag=direct指定用direct 10方式写文件,
这样–device-write-bps才能生效。
结果表明限速5MB/s左右。作为对比测试,如果不限速,结果如下。
[root@localhost ~]# docker run -it centos:stress
[root@61ee9e12f2ed /]# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.983062 s, 1.1 GB/s

2:安全通信 TLS 生产环境 (实验环境用SSL)

Docker-TLS加密通讯

TLS
加密算法:
原理
1.对称 DES 3DES AES 长度不同 长度越长安全越高,解密速度越慢
2.非对称 RSA 公钥:所有人可知(锁),私钥(钥匙)个人身份信息,不可抵赖。
3.证书:个人信息,密钥,有效期
4.ca:证书颁发机构 ca证书

密钥key—》身份签名csr—》(服务器/客户端)(结合ca.pem)证书pem

证书pem发送给客户端,客户端验证就使用证书验证

为了防止链路劫持、会话劫持等问题导致docker通信时被中间人攻击,c/s端应该通过加密方式通讯

[root@localhost ~]# mkdir /tls
[root@localhost ~]# cd /tls
[root@localhost tls]# hostnamectl set-hostname master
[root@localhost tls]# vim /etc/hosts

127.0.0.1 master

[root@localhost tls]# su
[root@master tls]# ping master
PING master (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.048 ms
^C
— master ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.041/0.044/0.048/0.007 ms

//创建ca密钥
[root@master tls]# openssl genrsa -aes256 -out ca-key.pem 4096 //输入123123
Generating RSA private key, 4096 bit long modulus
…++
…++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:

//创建ca证书
[root@master tls]# openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj “/CN= " -out ca.pem
Enter pass phrase for ca-key.pem: //输入密码123123
//创建服务器私钥
[root@master tls]# openssl genrsa -out server-key.pem 4096 Generating RSA private key, 4096 bit long modulus
…++
…++
//签名私钥
[root@master tls]# openssl req -subj "/CN=
” -sha256 -new -key server-key.pem -out server.csr
//使用ca证书与私钥证书签名,输入123123
[root@master tls]# openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
Signature ok
subject=/CN=*
Getting CA Private Key
Enter pass phrase for ca-key.pem:
//生成客户端密钥
[root@master tls]# openssl genrsa -out key.pem 4096
Generating RSA private key, 4096 bit long modulus
.++
…++
e is 65537 (0x10001)
//签名客户端
[root@master tls]# openssl req -subj “/CN=client” -new -key key.pem -out client.csr
//创建配置文件
[root@master tls]# echo extendedKeyUsage=clientAuth > extfile.cnf
//签名证书,输入123123,需要(签名客户端,ca证书,ca密钥)
[root@master tls]# openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
Signature ok
subject=/CN=client
Getting CA Private Key
Enter pass phrase for ca-key.pem:
//删除多余文件
[root@master tls]# rm -rf ca.srl client.csr extfile.cnf server.csr
[root@master tls]# ll
总用量 24
-rw-r–r--. 1 root root 3326 9月 26 16:22 ca-key.pem
-rw-r–r--. 1 root root 1765 9月 26 16:23 ca.pem
-rw-r–r--. 1 root root 1696 9月 26 16:31 cert.pem
-rw-r–r--. 1 root root 3243 9月 26 16:27 key.pem
-rw-r–r--. 1 root root 1647 9月 26 16:23 server-cert.pem
-rw-r–r--. 1 root root 3243 9月 26 16:23 server-key.pem
//配置docker
[root@master tls]# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/tls/ca.pem --tlscert=/tls/server-cert.
pem --tlskey=/tls/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

注释掉原来的,在下面插入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nTg0dhy2-1601193134583)(C:\Users\hu\AppData\Roaming\Typora\typora-user-images\1601109979742.png)]

//重启进程
[root@master tls]# systemctl daemon-reload
//重启docker服务
[root@master tls]# systemctl restart docker

//将/tls/ca.pem /tls/cert.pem /tls/key.pem三个文件复制到另一台主机
[root@master tls]# scp ca.pem root@192.168.20.20:/etc/docker/
The authenticity of host ‘192.168.20.20 (192.168.20.20)’ can’t be established.
ECDSA key fingerprint is SHA256:M+6YSK2hm7e8JY4G1qYmT0X1UmIr280vvpa+1rW8IBc.
ECDSA key fingerprint is MD5:bd:01:e2:85:f0:b0:36:8c:49:64:08:30:6c:2d:a4:37.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.20.20’s password:
ca.pem 100% 1765 633.0KB/s 00:00
[root@master tls]# scp cert.pem root@192.168.20.20:/etc/docker/
root@192.168.20.20’s password:
cert.pem 100% 1696 396.7KB/s 00:00
[root@master tls]# scp key.pem root@192.168.20.20:/etc/docker/
root@192.168.20.20’s password:
key.pem 100% 3243 1.5MB/s 00:00

//本地验证
[root@master tls]# docker --tlsverify --tlscacert=ca.pem --tlskey=key.pem -H tcp://master:2376 version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
The server probably has client authentication (–tlsverify) enabled. Please check your TLS client certification settings: Get https://master:2376/v1.40/version: remote error: tls: bad certificate
[root@master tls]# docker pull nginx

//client上操作
[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# su
[root@client ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.20.10 master

[root@client ~]# ll /etc/docker/
总用量 20
-rw-r–r--. 1 root root 1765 9月 26 16:47 ca.pem
-rw-r–r--. 1 root root 1696 9月 26 16:47 cert.pem
-rw-r–r--. 1 root root 67 9月 23 22:31 daemon.json
-rw-------. 1 root root 244 9月 23 22:31 key.json
-rw-r–r--. 1 root root 3243 9月 26 16:48 key.pem

[root@client docker]# docker --tlsverify --tlscacert=ca.pem --tlskey=key.pem -H tcp://master:2376 version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
key.json
-rw-r–r--. 1 root root 3243 9月 26 16:48 key.pem

[root@client docker]# docker --tlsverify --tlscacert=ca.pem --tlskey=key.pem -H tcp://master:2376 version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
The server probably has client authentication (–tlsverify) enabled. Please check your TLS client certification settings: Get https://master:2376/v1.40/version: remote error: tls: bad certificate

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/73841
 
369 次点击