阿里云 ACK 集群网络 | 学习笔记

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 快速学习阿里云 ACK 集群网络

开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程:阿里云 ACK 集群网络】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/913/detail/14606


阿里云 ACK 集群网络


目录

一、 Flannel 网络

二、 Terway 网络

三、 CoreDNS

四、 最佳实践

 

在 ACK 中,可以通过两种网络模式实现容器网络能力,分别是 Flannel 网络模式和 Terway 网络模式。

 

一、Flannel 网络

Flannel 是为 Kubernetes 设置的一个简单的三层网络实现的网络插件,在阿里云上使用的 Flannel 网络模式采用阿里云 VPC 模式,Flannel 网络基于阿里云 VPC 的自定义路由能力,来实现跨节点的 Pod 直接与 VPC 的互相访问。

1. Flannel 工作原理

集群的每个节点上会起一个 flannel agent,并且会给每个节点预分配一个 Pod CIDR ,这个 Pod CIDR 是容器集群 Pod CIDR 的子集。Pod 的报文通过后端机制来进行转发。

在集群中,无论 Pod 是否跨节点,Pod 之间是可以相互通信的,前面章节也讲解了 Pod 与 SVC(Service)、Pod 与外部的通信原理。在 Flannel 网络模式中,如下图所示,集群的 CIDR 地址段包含了节点所在的网络地址段,基于设备对的映射关系流量会首先经过 eth0 ,流向 cni0 到达对端 Pod 内 eth0,CCM 负责将每个节点的 Pod CIDR 网段在 VPC 路由表中指向对应的 ECS。

image.png

问题:在集群里添加新的节点,如果 Pod 网络不通,在 Flannel 模式中如何排查?

解决方法:

Ÿ 登录 Flannel 模式 K8s 集群 Master 节点;

Ÿ 执行命令 kubectl describe node xxx(xxx为节点名称)可以查看到 Pod CIDR 网络地址段,而 CCM 会将该网段加到 VPC 的路由表;

Ÿ 执行命令 kubectl exec -it xxx(xxx为Pod服务名) bash,以 bash 的方式进入任意运行的 Pod 中;

Ÿ 执行 dig 请求或 tcpdump 进行抓包分析,Flannel 集群模式下在主要在节点 eth0 和对端 Pod 内 eth0 上进行抓包;

ž 如果在节点 eth0 上可以抓到流出的包及回包,以此判断 iptables/lpvs 转发正常;

ž 如果在节点 eth0 节点上可以抓到包,而在对端 Pod 内 eth0 上抓不到包,可能是 iptables/lpvs、内核协议栈、tcp/udp memory 满导致流量包被丢弃,通过执行命令 netstat -st 查看所有 TCP 的统计信息;

ž 抓包示例:

命令:tcpdump -i any host  ip  -s0 -w p.pcap -C 200 -W 50

-i any 指定所有网卡,host ip 是指定主机 ip 地址,-s0 设置 buffer 值为不限制包的大小,-w 指定写入的文件,-C -W 指定抓包文件大小和数量。

 

二、Terway 网络

Terway 是阿里云容器服务团队推出的针对阿里云 VPC 网络的 CNI 插件,稳定、高性能,支持 Kubernetes NetworkPolicy 流控等,在 Terway 网络下,Pod 的 IP 和集群的 ECS 所属相同 VPC,是由交换机进行分配,如下图所示:

image.png

在 Terway 网络插件中,每个 Pod 都拥有自己网络栈和 IP 地址。同一台 ECS 内的 Pod 之间通信,直接通过机器内部的转发;跨 ECS 的 Pod 通信、报文通过 VPC 的弹性网卡直接转发。

目前云上 Flannel、Terway 网络模式的集群,不支持节点上不同的 Pod CIDR 扩容,建议使用 Terway 的 eni 多 IP 方式增加交换机。

Terway 集群下执行命令:terway-cli mapping 查看 Pod 名称及分配的 Pod IP;抓包命令:tcpdump -i any host ip  -nnvv -xxx

image.png

Terway 网络拓扑图

 

三、CoreDNS

CoreDNS 是一个灵活可扩展的 DNS 服务器,可以作为 Kubernetes 集群 DNS,解析服务域名和集群外部域名。

云上默认配置 CoreDns 的 IP 为 x.x.0.10(x.x为容器分配的网段),与选择的网段无关,默认启动两副本,可以进入任意 Pod 执行命令 kubectl exec -it xxx(xxx为服务名) bash,进入容器内执行命令cat /etc/resolv.conf查看 nameserver 的值为x.x.0.10。

image.png

CoreDNS 的解析过程

集群服务域名,如: ..svc.cluster.local

集群外部域名,如: www.aliyun.com, rm-2z****9na.mysql.rds.aliyuncs.com

image.png

Ÿ Pod 发起域名解析请求时,首先发给 CoreDNS x.x.1.0 进行解析,CoreDNS 根据集群模式的不同转发到后端 endpoint;

Ÿ 执行命令:ipvsadm -Ln|grep 0.10 查看转发信息;

Ÿ 当在集群中解析外部域名失败时,可以通过抓包,在节点和容器内分别执行命令:tcpdump -i any port 53 -nnvv -xxx|grep -i xx(xx为匹配查找的关键字);

Ÿ 执行命令ipvsadm -Ln -c,可以查看 ipvs session,默认 900s 会话保持,超过 900s 会话连接会被释放,在 ipvs 集群中建议长连接 keepalive 的值设置 900s 以内。

 

四、最佳实践

场景一:

当有海量 DNS 请求时,如何调整 CoreDNS cache 时间,减少 CoreDNS forward 外部 DNS 解析的压力。

方案一:kubectl -nkube-system edit cm coredns,修改 cache 的值为60

示例:

Corefile:

.:53 {

errors

health{

lameduck 5s

}

ready

kubernetes clusterlocal in-addrarpaip6arpa{

pods insecure

upstream

fallthrough in-addrarpaip6.arpa

ttl 30

}

rewrite name regex (.*)\.my\.domain {1}.default.svc.cluster.local

prometheus:9153

Forward. /etc/resolv.conf

cache 10

Log

Loop

reload

loadbalance

}

kind: ConfigMap

方案一:通过 curl -4 -v url 来指定通过 ipv4 方式访问服务。

方案三:Pod 内启用 nscd(DNS 缓存服务),根据 nscd 的缓存机制可以忽略解析本身导致的问题。

场景二:

添加 svc.local 后缀的外部域名,直接用默认 dns 去解析,而不是先走完所有 zone: defaultsvc.clusterlocal,svc.clusterlocal,cluster.local,如何优化呢?

方案一:使用标准 fqdn 域名,即在域名后加“.”(比如 www.aliyun.com.)

方案二:

修改 deployment,增加 options 里的:

-name ndots

value:"1"

示例:

app: test1

spec:

containers:

-image: nginx: latest

imagePullPolicy: Always

LivenessProbe:

failureThreshold:3

initialDelaySeconds:15

periodSeconds:10

successThreshold:1

tcpSocket:

port:80

timeoutSeconds: 1

name:test1

resources:

limits:

cpu: “1”

memory: 100Mi

requests:

cpu:250m

memory:32Mi

terminationMessagePath:/dev/termination-log terminationMessagePolicy: File

dnsConfig:

options:

- name: single-request-reopen

- name: ndots

value:  “1”

dnsPolicy: ClusterFirst

restartPolicy:Always

schedulerName: default-scheduler

securityContext: {}

terminationGracePeriodSeconds: 30

场景三:

如何将 AAAA 请求和 A 请求分开发送,而不是放到一个 stream 中,避免 conntrack 插表竞争导致解析失败?

方案:

修改 deployment 配置:kubectl edit deploy test1

在 template.spec 下的 dns 配置,添加:

dnsConfig:

options:

-name:single-request-reopen

示例:

template:

metadata:

creationTimestamp:null

labels:

app:test1

Spec:

containers:

- image:nginx:latest

imagePullPolicy:Always

livenessProbe:

failureThreshold:3

initialDelaySeconds:15

periodseconds:10

successThreshold:1

tcpSocket:

port:80

timeoutSeconds:1

name:test1

resources:

limits:

cpu:"1"

memory: 100Mi

requests:

cpu:250m

memory:32Mi

terminationMessagePath: /dev/termination-log

terminationMessagePolicv: File

dnsConfig:

options:

-name: single-request-reopen

dnsPolicy: ClusterFirst

restartPolicy: Always

schedulerName: default-scheduler

securityContext: {}

terminationGracePeriodSeconds: 30

 

本讲小结

1. 集群网络相关的知识,包括 flannel、terway 两种网络插件;

2. CoreDns 组件是如何解析集群内外部域名的;

image.png

思考:

1. flannel 集群,Pod 访问内网 rds、slb 实例的网络过程?

2. flannel/terway 集群,Pod 访问内网 rds,要如何添加 rds 白名单?

3. flannel/terway 集群遇到网络问题时如何抓包?

4. Pod 内解析外部域名失败,要怎么排查?

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
386 1
|
4月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
285 89
|
4月前
|
弹性计算 安全 应用服务中间件
阿里云渠道商:怎么配置阿里云网络ACL?
阿里云网络ACL是子网级无状态防火墙,支持精准流量控制、规则热生效且免费使用。本文详解5步配置流程,助您实现Web与数据库层的安全隔离,提升云上网络安全。
|
4月前
|
人工智能 安全 架构师
2025云栖大会 | 阿里云网络技术Session主题资料和视频回放归档
2025年9月24日-26日,杭州,一年一度的云栖大会如期而至;阿里云飞天洛神云网络作为阿里云计算的连接底座,是飞天云操作系统的核心组件,致力于为上云企业提供高可靠、高性能、高弹性、智能的连接服务。本次云栖,云网络产品线也带来全系列产品升级,以及创新技术重磅解读,围绕增强确定性、提效自动化、深耕智能化和敏捷全球化带来技术、产品和服务升级,以及全新的云网络产品生态合作计划发布。
626 2
|
4月前
|
弹性计算 网络安全 数据中心
阿里云创建专有网络VPC的【IPv4网段】如何选择?有什么区别?
阿里云VPC创建时需选IPv4网段,默认提供10.0.0.0/16、172.16.0.0/16、192.168.0.0/16,三者无功能差异。若仅单VPC且不连本地数据中心,可任选其一,确保不冲突即可。多VPC或混合云场景需规划避免IP重叠。不支持100.64.0.0/10等特殊网段。建议结合IPAM进行地址管理。
|
SQL 监控 安全
网络安全与信息安全:漏洞、加密与安全意识
随着互联网的迅猛发展,网络安全和信息安全问题日益受到关注。本文深入探讨了网络安全漏洞、加密技术以及提高个人和组织的安全意识的重要性。通过分析常见的网络攻击手段如缓冲区溢出、SQL注入等,揭示了计算机系统中存在的缺陷及其潜在威胁。同时,详细介绍了对称加密和非对称加密算法的原理及应用场景,强调了数字签名和数字证书在验证信息完整性中的关键作用。此外,还讨论了培养良好上网习惯、定期备份数据等提升安全意识的方法,旨在帮助读者更好地理解和应对复杂的网络安全挑战。
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
314 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
252 10
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
262 10

热门文章

最新文章

推荐镜像

更多