【containerd】进入容器网络空间

容器隔离性

容器的隔离性是其相对于传统虚拟机的一大优势,主要体现在以下几个方面:

  • 文件系统隔离:每个容器都有自己的文件系统,这意味着容器之间不会直接影响彼此的文件和目录。通过使用镜像和分层文件系统,容器可以共享相同的基础镜像,同时在其上层进行独立的读写操作。

  • 进程隔离:容器内部运行的进程在容器外部是不可见的。每个容器都有自己的进程空间,这使得容器之间的进程不会互相干扰。

  • 网络隔离:每个容器都有自己的网络栈,包括IP地址、网络接口等。容器之间的网络通信通常需要通过端口映射或使用容器编排工具(如Kubernetes)配置网络策略。

  • 资源隔离与限制:通过使用cgroups(控制组),可以限制容器使用的CPU、内存、磁盘I/O等资源。这防止了某个容器消耗过多的主机资源,从而影响其他容器或主机本身的性能。

  • 命名空间隔离:Linux命名空间技术允许容器拥有自己的PID、网络、用户ID、挂载、IPC(进程间通信)等命名空间。这些命名空间的隔离确保了容器之间的环境是独立的。

  • 安全隔离:容器通过使用安全模块(如AppArmor、SELinux)和内核特性(如Seccomp)来增强安全性,限制容器内的进程对系统的访问。

这些隔离特性使得容器能够在同一台主机上同时运行多个应用程序,而不会相互干扰,从而提高了资源利用率和应用的部署灵活性。

进入容器的网络命名空间

nsenter是一个强大的工具,它允许您进入Linux的不同命名空间。这里--net选项表示您想要进入网络命名空间 ,通过查询容器的PID号即可进入对应容器的网络命名空间。

nsenter --target <containerd_pid> --net
  • Docker PID查询

    #docker inspect -f '{{ .State.Pid }}' <container_name_or_id>
    或者
    #docker inspect <container_name_or_id> |grep -i pid
    

    注意*有时候查询出来的容器PID等于0,说明容器运行有问题,需要检查容器运行的程序日志

  • containerd PID查询

1、ctr -n k8s.io c ls     #查询你需要的容器,记录容器ID
2、ctr -n k8s.io task ls |grep containerd_pid
或者
ctr -n k8s.io task ls |grep containerd_pid |awk '{print$2}'
#回显PID信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值