应用在k8s上运行的几种网络模式

简介: 应用部署在k8s上,首先想到的是应用k8s的默认service模式配置。 应用通过service向集群内部(ClusterIP)和集群外部(NodePort)暴露服务。k8s中的其他应用通过kube-dns提供的dns解析功能,访问servicename:port即可访问service后面的pod的服务。

应用部署在k8s上,首先想到的是应用k8s的默认service模式配置。

应用通过service向集群内部(ClusterIP)和集群外部(NodePort)暴露服务。k8s中的其他 应用通过kube-dns提供的dns解析功能,访问servicename:port即可访问service后面的pod的服务。这需要两个应用服务之间的交互不需要记录对方的hostname或者IP,例如,假如应用服务通过socket连接到另一个应用服务,并通过记录他的IP或者Hostname,以便下次连接时作为验证对方。这样的话会出现servicename:port与podname:port或者podIP:port不符。

k8s hostnetwork配置

57c7e484779d49f1b5e149bc7e53e50df6eb390757c7e484779d49f1b5e149bc7e53e50df6eb3907

解决servicename:port与podname:port或者podIP:port不符的问题,可以把被验证的应用使用hostnetwork。

应用与宿主机共享网络空间,也就是k8s节点的IP,端口占用与宿主机一样。这样应用的IP就是宿主机的IP,与另一个应用的连接也不经过service IP这一层。另一个应用仍然采用kubernetes的pod网络模型,为使使用hostnetwork的应用能对其他应用的service name进行DNS解析,需要设置参数hostNetwork: true和dnsPolicy: ClusterFirstWithHostNet。

该配置的缺点:应用的网络与宿主机一样,需保证应用需要监听的网络端口在宿主机上没有被占用。并且无法使用容器漂移,动态伸缩特性。

k8s headless service配置

解决servicename:port与podname:port或者podIP:port不符的问题,还有一种方法,就是把被验证的应用配置使用headless service。headless service即是把service type为ClusterIP的service配置spec.clusterIP为None,这样的话就不会为其分配serviceIP,kube-dns解析servicename:port就会变成podIP:port。在把servicename配置和pod的hostname一样,这样的kube-dns解析servicename:port就与podhostname:port一样。达到了获得实际podIP的目的。相比hostnetwork配置,这个配置没有它所具有的缺点。

k8s statefulset headless service配置

上面提到headless service可以解决servicename:port与podname:port或者podIP:port不符的问题。这是针对一个应用pod在service后面,另一个应用pod在service的前面。现在假设同一个service后面的pod之间需要获悉对方的hostname或者podIP进行通信,怎么办?例如,storm的worker组件之间需要通过hostname通信,我们想要能快速伸缩worker组件,因此把所有的worker放到同一个service后面。

一种解决办法就是使用statefulset加headless service配置,这种配置kube-dns可以解析

podname.servicename.namespacename.svc.cluster.local对应到podIP。在同一个statefulset的pod的podname都是podname-0,podname-1,podname-2等数字递增的命名。对于podname-0可以解析

podname-1.servicename.namespacename.svc.cluster.local到podname-1的podIP。

在podname-0中使用命令

nslookup podname-1

会解析podname-1.namespacename.svc.cluster.local。因此需要我们修改/etc/resolv.conf

文件

在search 后面加上 servicename.namespacename.svc.cluster.local,这样就达到了解析到

podname-1.servicename.namespacename.svc.cluster.local的目的。

具体做法就是在statefulset的pod配置中加入lifecycle的postStart配置

lifecycle:

postStart:

exec:

command:

- /bin/sh

- -c

- >

if [ -z "$(grep servicename /etc/resolv.conf)" ]; then

sed "s/^search \([^ ]\+\)/search servicename.\1 \1/" /etc/resolv.conf > /etc/resolv.conf.new;

cat /etc/resolv.conf.new > /etc/resolv.conf;

rm /etc/resolv.conf.new;

fi;

至此,headless service后面的statefulset的pod之间可以相互通信了。

本文转自CSDN-应用在k8s上运行的几种网络模式

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
1天前
|
监控 安全 算法
网络安全与信息安全:防范漏洞、应用加密技术与提升安全意识
【4月更文挑战第29天】在数字化时代,网络安全和信息安全已成为我们日常生活和工作中不可或缺的一部分。本文将深入探讨网络安全中的漏洞问题,加密技术的应用以及提升个人和企业的安全意识。通过对这些方面的知识分享,希望能帮助读者更好地理解和应对网络安全挑战。
|
2天前
|
安全 算法 网络安全
网络安全与信息安全:防范漏洞、应用加密技术与培养安全意识
【4月更文挑战第29天】 在数字化时代,网络安全与信息安全保障已成为全球关注的焦点。随着网络攻击手段的不断演进和信息技术的快速发展,个人、企业乃至国家安全均面临着前所未有的挑战。本文深入探讨了网络安全漏洞的概念、成因及其对信息系统的潜在威胁,同时分析了现代加密技术的基本原理和应用实例,并强调了提升全民网络安全意识的重要性。通过阐述这些关键要素,旨在为读者提供全面的网络安全知识架构,以更好地应对网络环境中的安全风险。
|
3天前
|
Rust 前端开发 安全
【专栏】WebAssembly 技术:开启高性能网络应用新时代
【4月更文挑战第27天】WebAssembly是种虚拟机格式,用于在浏览器中运行编译后的C/C++、Rust等语言代码,提供高性能、高可移植性和安全性。其优势在于更快的执行速度、跨平台兼容及安全的沙箱环境。广泛应用在游戏开发、图形处理、计算机视觉等领域。未来,WebAssembly将支持更多语言,结合低代码平台,优化开发流程,同时应对优化编译和安全性的挑战,引领高性能网络应用新时代。
|
4天前
|
安全 物联网 5G
|
4天前
|
存储 SQL 安全
网络安全与信息安全:防范漏洞、应用加密技术与提升安全意识
【4月更文挑战第26天】 在数字化时代,网络安全和信息安全已成为保护个人隐私、企业资料以及国家安全的关键。本文深入探讨了网络安全的脆弱点——包括软件漏洞、人为错误及外部攻击,并详细分析了加密技术如何作为防御工具来确保数据传输的安全。文章还强调了增强个人和组织的安全意识对于构建坚固防线的重要性。通过实际案例分析和最新的研究成果,本文旨在为读者提供一个全面的网络安全策略框架,以应对不断演变的威胁。
|
5天前
|
安全 网络协议 网络安全
探索 SOCKS5 代理在跨境电商中的网络安全应用
跨境电商面临网络安全挑战,如数据泄露和欺诈。SOCKS5代理和代理IP技术成为解决方案。SOCKS5提供安全连接和匿名性,保护企业网络和数据;代理IP隐藏真实IP,降低攻击风险。通过数据加密、防止地理限制和抵御竞争对手分析,这两项技术助力跨境电商强化安全,扩展全球市场。但需结合其他安全措施,构建全面防护体系,以实现安全发展。
|
7天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
12天前
|
机器学习/深度学习 语音技术 网络架构
【视频】LSTM神经网络架构和原理及其在Python中的预测应用|数据分享
【视频】LSTM神经网络架构和原理及其在Python中的预测应用|数据分享
22 0
|
13天前
|
存储 监控 安全
网络安全与信息安全:防范漏洞、应用加密、提升意识
【4月更文挑战第18天】 在数字化时代,网络安全与信息安全保障已成为维护国家安全、企业利益和个人隐私的关键。本文深入探讨网络安全的多面性,包括识别和防御网络漏洞、应用加密技术保护数据以及提升全民网络安全意识的重要性。通过对这些关键领域的分析,文章旨在为读者提供实用的策略和建议,以增强其网络环境的安全防护能力。
11 0

推荐镜像

更多