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

2023-11-09

k8s deployment service默认配置

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

k8s hostnetwork配置

解决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之间可以相互通信了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用在k8s上运行的几种网络模式 的相关文章

随机推荐

  • 2.1.cuda驱动API-概述

    目录 前言 1 Driver API概述 2 补充知识 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程 之前有看过一遍 但是没有做笔记 很多东西也忘了 这次重新撸一遍 顺便记记笔记 本次课程学习精简 CUDA 教程 Dr
  • git rebase 合并提交与避免分叉合并

    本文让你熟练使用 rebase 学会以下两种操作 从此拒绝杂乱无章的 git 提交 目录 用法一 合并当前分支的多个commit记录 step1 找到想要合并的 commit 使用 rebase i step2 进入 Interact 交互
  • 阮一峰ES6 入门教程

    学习地址 https es6 ruanyifeng com
  • 书单(含资源链接,快撸!)

    撸资源 笨办法 学Python 第3版 https www jianshu com p 67a4827e88a1 Python 编写高质量Python代码的59个有效方法 https pan baidu com s 1vAw1R9bP5EC
  • 计算机视觉毕业后找不到工作怎么办?

    点击上方 视学算法 选择加 星标 置顶 重磅干货 第一时间送达 编辑 Amusi 来源 知乎 https www zhihu com question 335451320 本文仅作为学术分享 如果侵权 会删文处理 计算机视觉毕业后找不到工作
  • 使用tf-slim的ResNet V1 152和ResNet V2 152预训练模型进行图像分类

    本文使用tf slim的ResNet V1 152和ResNet V2 152预训练模型进行图像分类 并研究slim网络的scope命名等 tf slim文档不太多 实现过程中多参考官网的源码 https github com tensor
  • 静态代码扫描工具—— TScanCode

    一 简介 TscanCode支持以下类型规则扫描 空指针检查 包含可疑的空指针 数据越界 内存泄漏 分配和释放不匹配 逻辑错误 重复的代码分支 bool类型和INT进行比较 表达式永远True或者false等共18类检查 可疑代码检查 if
  • C语言 数据结构 栈的线性实现 基本操作代码

    typedef struct DataType data MaxSize int top LinearStack 初始化 void initStack LinearStack stack stack top 1 void isEmpty L
  • 消除游戏——蓝桥杯2022年第十三届省赛真题

    题目描述 在一个字符串 S 中 如果 S i S i 1 且S i 不等于S i 1 则称 S i 和 S i 1 为边缘字符 如果S i 不等于S i 1且 S i S i 1 则 S i 1 和 S i 也称为边缘字符 其它的字符都不是
  • tp5.1 查询字段为空的数据

    tp 语句直接查询空字段数据 gt where 字段名 null 查询为NULL时的条件 gt where 字段名 not null 查询不是NULL时的条件 官方文档提供了更加简洁的使用方式 推荐的方式是使用whereNull和where
  • 快速跑 nerf instant-ngp 快速调试与配置,跑自己的数据

    1 下载Anaconda3 2 打开Anaconda Prompt Anaconda 创建虚拟环境 conda create n nerf ngp python 3 8 切换到虚拟环境 conda activate nerf ngp 安装相
  • 2021年CNVD漏洞挖掘经验

    一 关于证书获取条件 先看一下CNVD的官方解释 归档漏洞的证书颁发条件为 1 对于中危及中危以上通用型漏洞 CVSS2 0基准评分超过4 0分 除小厂商的产品 非重要APP 黑盒测试案例不满10起等不颁发证书 2 涉及电信行业单位 中国移
  • js的三目运算写法

    1 什么是三目运算 布尔表达式 值0 值1 注意 三目运算和if else 的 区别是三目运算有返回值 例如 var max a gt b a b 2 多条件的三目运算怎么写 实例 根据学生成绩判定ABCD四个等级 var result s
  • Python3学习实战——用类实现简单的猜拳游戏

    Python3学习实战 用类实现简单的猜拳游戏 前言 本笔记仅个人认知和见解 水平有限 还请见谅 如有错误 还请指出 若有想法 欢迎共享 内容不代表最优解决方案 甚至可能不是很好的方法 仅供参考 文章目录 Python3学习实战 用类实现简
  • Ubuntu 20.04 LTS系统下安装STM32CubeProgrammer

    前言 软件环境 一 软件下载 STM32CubeProg STM32CubeProgrammer software for all STM32 STMicroelectronics 二 iso格式转换 制作软件 https etcher b
  • 用Xshell连接服务器失败:Could not connect to ‘192.xx.xx.xx‘ (port 22): Connection failed.

    问题描述 本来一直都连接正常 突然有一天连不上了 脸直接吓白了 本来就好多bug 现在直接服务器都连不上了 成年人的崩溃就在一瞬间 doge 解决方法 提示 仅适用于之前连接正常 突然连不上的情况 如果是这种情况的尽量不要按照网上的教程乱改
  • bat日期时间字符串的格式化处理

    bat日期时间字符串的格式化处理 一 时间 日期 二 字符串处理 一 时间 日期 Windows在批处理中显示的时间和日期格式如下 echo date 2023 05 25 周四 echo time 12 44 27 45 二 字符串处理
  • 【算法】 丑数 2,3,5。求第n个丑数

    因子中仅仅包含2 3 5的数 称为丑数 比如说14 就不是丑数 因为因子包含7 请输出所有丑数中的第n个丑数 include
  • ADNI数据集-数据分析11.17

    1 RID 是 Relative IDentifier 的英文缩写 相对标识符的意思 https www aoetc com 172960 html 2 ADNI1和ADNI2是医学研究上经常使用的数据集 ADNI数据集介绍 仅用于个人纪录
  • 应用在k8s上运行的几种网络模式

    k8s deployment service默认配置 应用部署在k8s上 首先想到的是应用k8s的默认service模式配置 应用通过service向集群内部 ClusterIP 和集群外部 NodePort 暴露服务 k8s中的其他应用通