K8S网络详解

本文深入探讨K8S网络的三大层面:容器网络、集群内网络和集群外网络。详细介绍了CNI插件和IPAM插件的作用,以及Service、Endpoints和Ingress在K8S网络中的应用。

K8S网络详解

按照我自己的理解,k8s网络分三个层面(由里到外):

  1. 容器网络(不同容器之间怎么相互访问)
  2. 集群内网络(不同节点之间怎么相互访问)
  3. 集群外网络(集群外怎么访问到集群内的服务)
容器网络

熟悉docker的同学会知道,docker创建的容器之间会通过一张docker0的网卡相互通信。而k8s社区为了方便用户适应各自的网络情况,暴露出一套api接口------cni,用户只要实现了这套接口就可以自定义容器网络配置策略。

CNI(Container Network Interface)是由一组用于配置Linux容器的网络接口的规范和库组成,同时还包含了一些插件。CNI仅关心容器创建时的网络分配,和当容器被删除时释放网络资源。通过此链接浏览该项目:https://github.com/containernetworking/cni。

  1. cni设计考量点
    • 容器运行时必须在调用任何插件之前为容器创建一个新的网络命名空间。
    • 然后,运行时必须确定这个容器应属于哪个网络,并为每个网络确定哪些插件必须被执行。
    • 网络配置采用JSON格式,可以很容易地存储在文件中。网络配置包括必填字段,如name和type以及插件(类型)。网络配置允许字段在调用之间改变值。为此,有一个可选的字段args,必须包含不同的信息。
    • 容器运行时必须按顺序为每个网络执行相应的插件,将容器添加到每个网络中。
    • 在完成容器生命周期后,运行时必须以相反的顺序执行插件(相对于执行添加容器的顺序)以将容器与网络断开连接。
    • 容器运行时不能为同一容器调用并行操作,但可以为不同的容器调用并行操作。
    • 容器运行时必须为容器订阅ADD和DEL操作,这样ADD后
<think>我们正在处理用户关于Kubernetes命令详细解释大全的请求。根据引用[2],我们有一些命令示例,但用户需要更全面的命令大全。 由于引用[1]提到了Kubernetes的部署方式,但用户当前需求是命令大全,因此我们将主要参考引用[2]并扩展更多常用命令。 注意:引用[2]提供了一些命令片段,但不够完整。因此,我们需要整理一个更全面的Kubernetes常用命令列表,并给出简要解释。 我们将按照Kubernetes资源类型和操作类别来组织命令,以便用户清晰理解。 由于Kubernetes命令非常丰富,我们不可能列出所有,但可以列出最常用的命令及其解释。 结构: 1. 集群管理 2. 资源创建和删除 3. 查看和查询资源 4. 资源修改和更新 5. 调试和日志 6. 部署和滚动更新 7. 配置和管理 8. 网络相关 9. 存储相关 10. 安全相关(如Secret) 注意:每个命令给出基本语法和解释,并尽量给出简单示例。 由于用户要求详细解释大全,我们将尽可能覆盖常用命令。 </think> 以下是 Kubernetes (k8s) 常用命令的详细解释大全,按功能分类整理: --- ### 一、集群管理 1. **查看集群信息** `kubectl cluster-info` 显示集群 Master 和核心服务地址[^1]。 2. **节点管理** ```bash kubectl get nodes # 查看所有节点状态 kubectl describe node <node-name> # 查看节点详细信息(资源、事件等) kubectl cordon <node-name> # 标记节点不可调度 ``` --- ### 二、资源操作 #### 1. 基础命令 ```bash kubectl get <resource> # 查看资源(如 pods, deployments) kubectl describe <resource> <name> # 查看资源详细信息 kubectl delete <resource> <name> # 删除资源 ``` **示例**: `kubectl get pods -A` 查看所有命名空间的 Pod。 #### 2. 创建资源 ```bash kubectl create -f <file.yaml> # 通过 YAML 文件创建 kubectl apply -f <file.yaml> # 应用 YAML 配置(创建/更新) kubectl create secret generic <name> --from-literal=<key>=<value> # 创建 Secret[^2] ``` --- ### 三、Pod 管理 1. **日志与调试** ```bash kubectl logs <pod-name> # 查看 Pod 日志 kubectl exec -it <pod-name> -- /bin/sh # 进入 Pod 的 Shell kubectl port-forward <pod-name> 8080:80 # 端口转发到本地 ``` 2. **资源限制** `kubectl set resources pod <pod-name> --limits=<resource-type>=<limit-value>` 示例:限制 CPU 和内存 `kubectl set resources pod nginx --limits=cpu=200m,memory=512Mi`[^2] --- ### 四、部署与扩缩容 ```bash kubectl rollout status deployment/<name> # 检查部署状态 kubectl scale deployment/<name> --replicas=3 # 扩缩容副本数 kubectl rollout undo deployment/<name> # 回滚到上一版本 ``` --- ### 五、网络与服务 ```bash kubectl get services # 查看所有服务 kubectl expose deployment <name> --port=80 # 创建 Service 暴露部署 kubectl get ingress # 查看 Ingress 规则 ``` --- ### 六、配置管理 1. **ConfigMap & Secret** ```bash kubectl create configmap <name> --from-file=<path> # 从文件创建 ConfigMap kubectl get secrets # 查看所有 Secret ``` 2. **查看资源定义** `kubectl get <resource>/<name> -o yaml > file.yaml` 导出资源 YAML 配置(便于修改或备份)。 --- ### 七、高级调试 ```bash kubectl top nodes/pods # 查看资源使用率(需安装 metrics-server) kubectl events --watch # 实时监控集群事件 kubectl get pods --field-selector=status.phase=Failed # 筛选异常 Pod ``` --- ### 八、常用工具 - **`minikube`**:单节点本地集群(适合开发测试)[^1] ```bash minikube start # 启动集群 minikube dashboard # 打开 Web 控制台 ``` - **`kubeadm`**:生产级集群部署工具 ```bash kubeadm init # 初始化 Master 节点 kubeadm join <token> # 节点加入集群 ``` > 💡 **提示**: > - 使用 `kubectl --help` 查看子命令帮助(如 `kubectl create --help`) > - 官方命令文档:[Kubernetes CLI Reference](https://kubernetes.io/docs/reference/kubectl/)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值