K8S原理剖析:网络模型原理剖析和实践

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
应用型负载均衡 ALB,每月750个小时 15LCU
简介: K8S原理剖析:网络模型原理剖析和实践

大纲


  • 网络模型与CNI
  • Service
  • Ingress
  • DNS
  • Network Policy


网络模型与CNI

一个Pod一个IP

  • - 每个Pod独立IP, Pod内所有容器共享网络namespace(同一个IP)
  • - 容器之间直接通信,不需要NAT
  • - Node和容器直接通信,不需要NAT
  • - 其他容器和容器自身看到的IP是一样的

集群内访问走Service,集群外访问走Ingress

CNI( container network interface)用于配置Pod网络 -不支持docker网络


Bridge网络


Overlay网络


CNI:Container Network Interface

容器网络的标准化

使用JSON来描述网络配置

两类接口:

  • - 配置网络 -- 创建容器时调用
  • AddNetwork(net NetworkConfig, rt RuntimeConf) (types.Result, error)
  • - 清理网络 -- 删除容器时调用
  • DelNetwork(net NetworkConfig, rt RuntimeConf)


Service


Service类型

ClusterIP

  • - 默认类型,自动分配集群内部可以访问的虚IP——Cluster IP。

NodePort

  • - 为Service在Kubernetes集群的每个Node上分配一个端口,即NodePort, 集群内/外部可基于任何一个NodeIP:NodePort的形式来访问Service。

LoadBalancer

  • - 需要跑在特定的cloud provider上
  • - Service Controller自动创建一个外部LB并配置安全组
  • - 对集群内访问, kube-proxy用iptables或ipvs实现了云服务提供商LB的部分功能: L4转发,安全组规则等


kubernetes服务发现


Service实现之iptables

Iptables是用户空间应用程序,通过配置Netfilter规则表( Xtables )来构建linux内核防火墙

DNAT 的全称为Destination Network Address Translation目的地址转换,常用于防火墙中。

iptables的规则表和链(忽略centos中的第5个表SECURITY,常用的只是filter, nat)

表(tables):提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理

链(chains):是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

规则链:

  • 1)INPUT——进来的数据包应用此规则链中的策略
  • 2)OUTPUT——外出的数据包应用此规则链中的策略
  • 3)FORWARD——转发数据包时应用此规则链中的策略
  • 4)PREROUTING——对数据包作路由选择前应用此链中的规则(记住!所有的数据包进来的时侯都先由这个链处理)
  • 5)POSTROUTING——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

链可以说是数据包流动的链条,只分两条路,转发出去和到本机的;链条里嵌着表,每个结点的表不一样,可以实现的规则功能和特定结点结合在一起;也可以从表考虑,nat表只影响PREROUTING,POSTROUTING,OUTPUT结点,在链条的前后;filter表只影响FORWARD,INPUT,OUTPUT结点,在链条的中间部分;


Service实现之ipvs

IPVS是LVS的负载均衡模块,亦基于netfilter,但比iptables性能更高。

ipvs长连接,默认时间15min,可以最大调整到31天


iptables和ipvs对比


如何从集群外访问kubernetes的service

使用NodePort类型的Service

  • - 要求Node有对外可访问IP

使用LoadBalancer类型的Service

  • - 要求在特定的云服务上跑K8S

Service只提供L4负载均衡功能,而没有L7功能


Ingress

Ingress是授权入站连接到达集群服务的规则集合

  • - 支持通过URL方式将Service暴露到K8S集群外, Service之上的L7访问入口
  • - 支持自定义Service的访问策略
  • - 提供按域名访问的虚拟主机功能
  • - 支持TLS


Ingress DIY

需要自己实现Ingress Controller

  • - List/Watch K8S的Service, Endpoints, Ingress对象,刷新外部LB的规则和配置
  • - 官方提供Nginx和GCE的Ingress Controller示例

想通过域名访问Ingress?

  • - 需要自己配置域名和Ingress IP的映射: host文件,自己的DNS(不是Kube-dns)


DNS


kube-dns

  • kubedns: List/Watch K8S Service和Endpoints变化。接入SkyDNS,在内存中维护DNS记录,是dnsmasq的上游。
  • dnsmasq: DNS配置工具,监听53端口,为集群提供DNS查询服务。提供DNS缓存,降低kubedns压力。
  • sidecar:健康检查,检查kube-dns和dnsmasq的健康


Network Policy


Network Policy是什么

基于源IP的访问控制列表

  • - 限制Pod的进/出流量
  • - 白名单

Pod网络隔离的一层抽象

  • - label selector
  • - namespace selector
  • - port
  • - CIDR

没有Network Policy意味着:“全网通”

网络插件实现Policy Controller


默认Network Policy


拒绝所有流量进入


限制部分流量进入

允许所有流量进入


限制流量从指定端口进入


支持Network Policy的网络插件

 

  • Calico
  • Cilium
  • Weave Net
  • Kube-router
  • Romana

注意: flannel和kubenet不支持network policy

 


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的自适应神经网络:原理与应用
【8月更文挑战第14天】在深度学习领域,自适应神经网络作为一种新兴技术,正逐渐改变我们处理数据和解决问题的方式。这种网络通过动态调整其结构和参数来适应输入数据的分布和特征,从而在无需人工干预的情况下实现最优性能。本文将深入探讨自适应神经网络的工作原理、关键技术及其在多个领域的实际应用,旨在为读者提供一个全面的视角,理解这一技术如何推动深度学习向更高效、更智能的方向发展。
|
6天前
|
机器学习/深度学习 人工智能 PyTorch
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
20 1
|
6天前
|
消息中间件 网络协议 Java
你不得不了解的网络IO模型知识
该文章主要讲述了网络I/O模型的相关知识,包括不同的I/O模型以及它们的特点和应用场景。
你不得不了解的网络IO模型知识
|
8天前
|
机器学习/深度学习 人工智能 算法
深度学习的奥秘:探索神经网络的核心原理
深度学习,一个听起来既神秘又充满魔力的词汇,它如同一扇通往未知世界的大门,背后隐藏着无尽的智慧与可能。本文将以一种通俗易懂的方式,带领读者走进深度学习的世界,探索那些构成神经网络核心的基本原理。我们将从最初的感知机模型出发,逐步深入到复杂的多层网络结构,揭示数据如何在这些网络中流动、变化,最终实现智能决策的过程。通过这篇文章,你将了解到深度学习不仅仅是技术的堆砌,更是对自然界智慧的一种模仿与致敬。
19 1
|
11天前
|
网络协议 Java 关系型数据库
16 Java网络编程(计算机网络+网络模型OSI/TCP/IP+通信协议等)
16 Java网络编程(计算机网络+网络模型OSI/TCP/IP+通信协议等)
41 2
|
6天前
|
存储 Kubernetes 调度
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
19 0
|
6天前
|
人工智能 物联网 异构计算
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
30 0
|
7天前
|
机器学习/深度学习 人工智能 算法
人人都能搞定的大模型原理 - 神经网络
从1950年人工智能初现雏形至今,感知机作为神经网络的基石,引领了从单层到深层神经网络的技术飞跃。20世纪50年代末,弗兰克·罗森布拉特受人脑神经元启发,提出了感知机模型,它能够通过学习调整权重与阈值来识别模式,如手写数字。随着技术进步,感知机演变成更为复杂的层级和卷积神经网络。直至2022年ChatGPT的问世,人工智能的应用进入了公众视野。感知机的学习机制基于监督学习,通过不断调整权重和阈值来提高识别准确性。这种“亚符号”派的技术逐渐发展为拥有数十亿参数的大模型,展示了强大的智能涌现能力。随着AI技术的不断发展,我们正步入一个人机共生的新时代。
|
11天前
|
canal Kubernetes Docker
基于Kubernetes v1.25.0和Docker部署高可用集群(03部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(03部分)
|
6天前
|
Kubernetes 安全 数据安全/隐私保护
Kubernetes(K8S) 集群安全机制
Kubernetes(K8S) 集群安全机制
15 2

推荐镜像

更多