经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
Kubernetes-保障集群内节点和网络安全
来源:cnblogs  作者:姚红  时间:2019/8/19 8:39:04  对本文有异议

13.1.在pod中使用宿主节点的Linux命名空间

13.1.1.在pod中使用宿主节点的网络命名空间

   在pod的yaml文件中就设置spec.hostNetwork: true  

   这个时候pod使用宿主机的网络,如果设置了端口,则使用宿主机的端口。

  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: pod-host-yaohong
  5. spec:
  6. hostNetwork: true //使用宿主节点的网络命名空间
  7. containers:
  8. - image: luksa/kubia
  9. command: ["/bin/sleep", "9999"]

13.1.2.绑定宿主节点上的端口而不使用宿主节点的网络命名空间

   在pod的yaml文件中就设置spec.containers.ports字段来设置

   在ports字段中可以使用

  containerPorts设置通过pod 的ip访问的端口

  container.hostPort设置通过所在节点的端口访问

  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: kubia-hostport-yaohong
  5. spec:
  6. containers:
  7. - image: luksa/kubia
  8. - name: kubia
  9. ports:
  10. - containerport: 8080 //该容器通过pod IP访问该端口
  11. hostport: 9000 //该容器可以通过它所在节点9000端口访问
  12. protocol: Tcp

13.1.3.使用宿主节点的PID与IPC

   PID是进程ID,PPID是父进程ID

   在linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。

  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: pod-with-host-pid-and-ipc-yaohong
  5. spec:
  6. hostPID: true //你希望这个pod使用宿主节点的PID命名空间
  7. hostIPC: true //你希望pod使用宿主节点的IPC命名空间
  8. containers
  9. - name: main
  10. image: alpine
  11. command: ["/bin/sleep", "99999"]

 

13.2.配置节点的安全上下文

13.2.1.使用指定用户运行容器

  查看某个pod运行的用户

  1. $ kubectl -n kube-system exec coredns-7b8dbb87dd-6ll7z id
  2. uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)

  容器的运行用户再DockerFile中指定,如果没有指定则为root

  指定pod的运行的用户方法如下

  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: pod-as-user
  5. spec:
  6. containers
  7. - name: main
  8. image: alpine
  9. command: ["/bin/sleep", "99999"]
  10. securityContext:
  11. runAsUser: 405 //你需要指定的用户ID,而不是用户名

13.2.2.阻止容器以root用户运行

  runAsNonRoot来设置
  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: pod-as-user
  5. spec:
  6. containers
  7. - name: main
  8. image: alpine
  9. command: ["/bin/sleep", "99999"]
  10. securityContext:
  11. runAsNonRoot: true //这个容器只允许以非root用户运行

13.2.3.使用特权模式运行pod

  为了获得宿主机内核完整的权限,该pod需要在特权模式下运行。需要添加privileged参数为true。

  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: pod-as-privileged
  5. spec:
  6. containers
  7. - name: main
  8. image: alpine
  9. command: ["/bin/sleep", "99999"]
  10. securityContext:
  11. privileged: true //这个容器将在特权模式下运行

13.2.4.为容器单独添加内核功能

  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: pod-as-capability
  5. spec:
  6. containers
  7. - name: main
  8. image: alpine
  9. command: ["/bin/sleep", "99999"]
  10. securityContext:
  11. capabilities: //该参数用于pod添加或者禁用某项内核功能
  12. add:
  13. - SYS_TIME //添加修改系统时间参数

13.2.5.在容器中禁止使用内核功能

  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: pod-as-capability
  5. spec:
  6. containers
  7. - name: main
  8. image: alpine
  9. command: ["/bin/sleep", "99999"]
  10. securityContext:
  11. capabilities: //该参数用于pod添加或者禁用某项内核功能
  12. drop:
  13. - CHOWN //禁用容器修改文件的所有者

13.2.6.阻止对容器根文件系统的写入

  securityContext.readyOnlyFilesystem设置为true来实现阻止对容器根文件系统的写入。
  1. apiVersion: v1
  2. kind: pod
  3. metadata:
  4. name: pod-with-readonly-filesystem
  5. spec:
  6. containers
  7. - name: main
  8. image: alpine
  9. command: ["/bin/sleep", "99999"]
  10. securityContext:
  11. readyOnlyFilesystem: true //这个容器的根文件系统不允许写入
  12. volumeMounts:
  13. - name: my-volume
  14. mountPath: /volume //volume写入是允许的,因为这个目录挂载一个存储卷
  15. readOnly: false 

13.3.限制pod使用安全相关的特性

13.3.1.PodSecurityPolicy资源介绍

   PodSecurityPolicy是一种集群级别(无命名空间)的资源,它定义了用户能否在pod中使用各种安全相关的特性。

13.3.2.了解runAsUser、fsGroups和supplementalGroup策略

 

  1. runAsUser:
  2. runle: MustRunAs
  3. ranges:
  4. - min: 2 //添加一个max=min的range,来指定一个ID为2的user
  5. max: 2
  6. fsGroup:
  7. rule: MustRunAs
  8. ranges:
  9. - min: 2
  10. max: 10 //添加多个区间id的限制,为2-10 或者20-30
  11. - min: 20
  12. max: 30
  13. supplementalGroups:
  14. rule: MustRunAs
  15. ranges:
  16. - min: 2
  17. max: 10
  18. - min: 20
  19. max: 30

13.3.3.配置允许、默认添加、禁止使用的内核功能

   三个字段会影响容器的使用

  allowedCapabilities:指定容器可以添加的内核功能
  defaultAddCapabilities:为所有容器添加的内核功能
  requiredDropCapabilities:禁止容器中的内核功能
  1. apiVersion: v1
  2. kind: PodSecurityPolicy
  3. spec:
  4. allowedCapabilities:
  5. - SYS_TIME //允许容器添加SYS_time功能
  6. defaultAddCapabilities:
  7. - CHOWN //为每个容器自动添加CHOWN功能
  8. requiredDropCapabilities:
  9. - SYS_ADMIN //要求容器禁用SYS_ADMIN和SYS_MODULE功能

13.4.隔离pod网络

13.4.1.在一个命名空间中使用网络隔离

  podSelector进行对一个命名空间下的pod进行隔离

  1. apiVersion: networking.k8s.io/v1
  2. kind: NetworkPolicy
  3. metadata:
  4. name: postgres-netpolicy
  5. spec:
  6. podSelector: //这个策略确保了对具有app=databases标签的pod的访问安全性
  7. matchLabels:
  8. app: database
  9. ingress:
  10. - from:
  11. - podSelector: //它只允许来自具有app=webserver标签的pod的访问
  12. matchLabels:
  13. app: webserver
  14. ports:
  15. - port: 5432 //允许对这个端口的访问

13.4.2.在 不同的kubernetes命名空间之间进行网络隔离

   namespaceSelector进行对不同命名空间间进行网络隔离

  1. apiVersion: networking.k8s.io/v1
  2. kind: NetworkPolicy
  3. metadata:
  4. name: postgres-netpolicy
  5. spec:
  6. podSelector: //这个策略确保了对具有app=databases标签的pod的访问安全性
  7. matchLabels:
  8. app: database
  9. ingress:
  10. - from:
  11. - namespaceSelector: //只允许tenant: manning标签的命名空间中运行的pod进行互相访问
  12. matchLabels:
  13. tenant: manning
  14. ports:
  15. - port: 5432 //允许对这个端口的访问

13.4.3.使用CIDR网络隔离

  1. ingress:
  2. - from:
  3. - ipBlock:
  4. cidr: 192.168.1.0/24 //指明允许访问的ip段

13.4.4.限制pod对外访问流量

   使用egress进行限制

  1. spec:
  2. podSelector: //这个策略确保了对具有app=databases标签的pod的访问安全性
  3. matchLabels:
  4. app: database
  5. egress: //限制pod的出网流量
  6. - to:
  7. - podSelector:
  8. matchLables: //database的pod只能与有app: webserver的pod进行通信
  9. app: webserver

  

 

原文链接:http://www.cnblogs.com/yaohong/p/11369084.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号