从外部访问K8s中Pod的五种方式

news2024/12/24 13:56:55

hostNetwork、
hostPort、
NodePort、
LoadBalancer、
Ingress

暴露Pod与Service一样,因为Pod就是Service的backend

1、hostNetwork:true

这是一种直接定义 Pod 网络的方式。
如果在 Pod 中使用 hostNetwork:true 配置, pod 中运行的应用程序可以直接看到 pod 启动的主机的网络接口。
在主机的所有网络接口上都可以访问到该应用程序。
注:每次pod的IP是会变化的

使用主机网络的 pod 的示例定义:

apiVersion: v1
kind: Pod
metadata:
  name: influxdb
spec:
  hostNetwork: true
  containers:
    - name: influxdb
      image: influxdb

部署该 Pod:

$ kubectl create -f influxdb-hostnetwork.yml

访问该 pod 所在主机的 8086 端口:

curl -v http://$POD_IP:8086/ping

将看到 204 No Content 的 204 返回码,说明可以正常访问。

注意:
1. 
每次启动这个 Pod 的时候都可能被调度到不同的节点上,所有外部访问 Pod 的 IP 也是变化的,而且调度 Pod 的时候还需要考虑是否与宿主机上的端口冲突,因此一般情况下除非您知道需要某个特定应用占用特定宿主机上的特定端口时才使用 hostNetwork: true 的方式。
2. 这种 Pod 的网络模式有一个用处就是可以将网络插件包装在 Pod 中然后部署在每个宿主机上,这样该 Pod 就可以控制该宿主机上的所有网络。

2、hostPort:

这是一种直接定义 Pod 网络的方式。
hostPort 直接将容器的端口与所调度的节点上的端口路由绑定,这样用户就可以通过宿主机的 IP 加上来访问 Pod 了。

如:

apiVersion: v1
kind: Pod
metadata:
  name: influxdb
spec:
  containers:
    - name: influxdb
      image: influxdb
      ports:
        - containerPort: 8086
          hostPort: 8086

注:这样做有个缺点,因为 Pod 重新调度的时候该 Pod 被调度到的宿主机可能会变动,这样就变化了,用户必须自己维护一个 Pod 与所在宿主机的对应关系。
这种网络方式可以用来做 nginx Ingress controller 。外部流量都需要通过 kubenretes node 节点的 80 和 443 端口。

3、NodePort:

1. 是K8s里一个广泛应用的服务暴露方式。
2. K8s中的service默认情况都是使用Cluster IP这种类型,会产生一个只能在内部访问的Cluster IP,3.如果想能够直接访问service,需要将service type修改为nodePort。
4.同时给service指定一个nodeport值(30000-32767),用` --service-node-port-range`定义。
集群外就可以使用K8s任意一个节点的IP加上30000端口访问该服务了,kube-proxy会自动将流量以轮询的方式转发给该service的每一个pod。

apiVersion: v1
kind: Pod
metadata:
  name: influxdb
  labels:
    name: influxdb
spec:
  containers:
    - name: influxdb
      image: influxdb
      ports:
        - containerPort: 8086

同时还可以给 service 指定一个 nodePort 值,范围是 30000-32767,这个值在 API server 的配置文件中,用 --service-node-port-range 定义。

kind: Service
apiVersion: v1
metadata:
  name: influxdb
spec:
  type: NodePort
  ports:
    - port: 8086
      nodePort: 30000
  selector:
    name: influxdb

1. 集群外就可以使用 kubernetes 任意一个节点的 IP 加上 30000 端口访问该服务了。kube-proxy 会自动将流量以 round-robin 的方式转发给该 service 的每一个 pod。
2. 这种服务暴露方式,无法让你指定自己想要的应用常用端口,不过可以在集群上再部署一个反向代理作为流量入口。

4、LoadBalancer:

LoadBalancer 只能在 service 上定义。这是公有云提供的负载均衡器,如 AWS、Azure、CloudStack、GCE 等。

kind: Service
apiVersion: v1
metadata:
  name: influxdb
spec:
  type: LoadBalancer
  ports:
    - port: 8086
  selector:
    name: influxdb

查看服务:

kubectl get svc influxdb

内部可以使用ClusterIP:Port来访问服务

外部可以使用两种方式:

    1. 任意节点的IP加30051端口访问服务 10.97.121.42:30051
    2. 使用EXTERNAL-IP来访问,这是云供应商提供的负载均衡IP 10.13.242.236:8086

5、Ingress:

Ingress 是自 kubernetes1.1 版本后引入的资源类型。必须要部署 Ingress controller 才能创建 Ingress 资源,Ingress controller 是以一种插件的形式提供。

  1. Ingress controller 部署在 Kubernetes 之上的 Docker 容器。
  2. 它的 Docker 镜像包含一个像 nginx 或 HAProxy 的负载均衡器和一个控制器守护进程。
  3. 控制器守护程序从 Kubernetes 接收所需的 Ingress 配置。
  4. 它会生成一个 nginx 或 HAProxy 配置文件,并重新启动负载平衡器进程以使更改生效。换句话说,Ingress controller 是由 Kubernetes 管理的负载均衡器。

Kubernetes Ingress 提供了负载平衡器的典型特性:HTTP 路由,粘性会话,SSL 终止,SSL 直通,TCP 和 UDP 负载平衡等。目前并不是所有的 Ingress controller 都实现了这些功能,需要查看具体的 Ingress controller 文档。

ingress controller是由K8s管理的负载均衡容器,它的镜像包含一个nginx或HAProxy负载均衡器和一个控制器守护进程。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: influxdb
spec:
  rules:
    - host: influxdb.kube.example.com
      http:
        paths:
          - backend:
              serviceName: influxdb
              servicePort: 8086

外部访问URL http://influxdb.kube.example.com/ping 访问该服务,入口是80端口,然后Ingress controller直接将流量转发给后端Pod,不需再经过kube-proxy的转发,比LoadBalance方式更高效。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/888086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[计算机入门] 设置屏幕分辨率

3.1 设置屏幕分辨率 3.1.1 屏幕分辨率介绍 屏幕分辨率,是指屏幕上显示的像素个数,它决定了显示图像的清晰度和精细度。屏幕分辨率通常以水平像素数和垂直像素数来衡量,例如1600 x 1200。 在相同大小的屏幕上,当屏幕分辨率较低时…

vue中的路由缓存和解决方案

路由缓存的原因 解决方法 推荐方案二,使用钩子函数beforeRouteUpdate,每次路由更新前执行

[自学记录06|*百人计划]Gamma矫正与线性工作流

一、前言 Gamma矫正其实也属于我前面落下的一块内容,打算把它补上,其它的没补是因为我之前写的GAMES101笔记里已经涵盖了,而Gamma矫正在101里面确实没提到,于是打算把它补上,这块内容并不难,但是想通透的理…

什么是CSS预处理器?请列举几个常见的CSS预处理器。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS预处理器是什么?⭐ 常见的CSS预处理器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是…

FPGA_学习_14_第一个自写模块的感悟和ila在线调试教程与技巧(寻找APD的击穿偏压)

前一篇博客我们提到了,如果要使用算法找到Vbr,通过寻找APD采集信号的噪声方差的剧变点去寻找Vbr是一个不错的方式。此功能的第一步是在FPGA中实现方差的计算,这个我们已经在上一篇博客中实现了。 继上一篇博客之后,感觉过了很久了…

这场大学生竞赛中,上百支队伍与合合信息用AI共克难题

目录 0 校企联合共克难题1 北京林业大学:文档格式转换2 浙江中医药大学:个性化题库3 中南林业科技大学:交互场景挖掘4 重庆邮电大学:大模型赋能智能文档5 总结 0 校企联合共克难题 近日,中国大学生服务外包创新创业大…

如何使用CSS实现一个响应式视频播放器?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现响应式视频播放器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣…

avue多选列表根据后端返回的某个值去判断是否选中;avue-curd多选回显

效果如上: getSiteList().then(res > {//列表数据this.siteData res.data.datathis.$nextTick(()>{this.siteData.forEach(item>{//业务条件if(item.configid&&item.configid!0&&item.configid>0){//符合条件时调用选中的方法this.$…

一文科普,买股票加杠杆是怎么回事?其利弊表现在哪?

买股票加杠杆是一种投资策略,通过借入资金来增加投资额度,进而放大投资回报。这种策略的利弊主要表现在以下几个方面。 首先,加杠杆的主要利表现在于放大投资回报。借入的资金可以投资更多的股票,当股票价格上涨时,投资…

XDR解决方案三

XDR未来的进化之路 精细化、智能化、个性化和场景化 当前XDR未来发展方向的问题分享了他的洞察和思考。刘庆林认为,精细化、智能化、个性化和场景化将是未来XDR的重要方向。 首先,实现精准防护的唯一路径,就是要从云、管、边、端、人五个维…

8.15 IO的多路复用

select的TCP客户端 poll的TCP客户端

探索网络架构的关键角色:六种常用的服务器类型

在今天的数字时代,服务器是支撑各种在线服务和应用的基石。不同类型的服务器在网络架构中扮演着不同的角色,从网页传输到电子邮件交换,再到文件传输和内容分发。本文将深入探讨六种最常用的服务器类型,解释它们的功能和重要性&…

梅林(Asuswrt-Merlin)>384.7固件自定义DDNS服务

指南https://github.com/RMerl/asuswrt-merlin.ng/wiki/DDNS-services配置文件示例https://github.com/troglobit/inadyn/tree/master/examples1 插入优盘,下载配置文件示例修改,以cloudflare为例 provider cloudflare.com {username 域名.compassword…

【后端必看】Redis 最佳实践

文章目录 1. Redis 键值设计1.1 优雅的 key 结构1.2 拒绝 BigKeyBigKey的危害如何发现BigKey①redis-cli --bigkeys② scan 扫描③第三方监控④网络监控 如何删除 BigKey 1.3 恰当的数据类型总结: 2. 批处理优化3. 服务器端优化-持久化配置4. 服务器端优化-慢查询优…

SpringBoot案例-员工管理-分页条件查询

根据页面原型,明确需求 页面原型 需求 查看接口文档 接口文档的链接如下: 【腾讯文档】SpringBoot案例所需文档 https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 分页条件查询就时将条件查询的结果进行分页展示,由于有的条件可能设…

问题:RuntimeError: Distributed package doesn‘t have NCCL built in

现象 python在windows环境下dist.init_process_group(backend, rank, world_size)处报错‘RuntimeError: Distributed package doesn’t have NCCL built in’ 原因分析 windows不支持NCCL backend 方法1 import sysif sys.platform "win32":os.environ["…

基于X86六轮差速移动机器人运动控制器设计与实现(一)软件与硬件架构

本文研究的六轮差速移动机器人 (Six-Wheeled Differential Mobile Robot , SWDMR) 为了满足资源站到资源站点对点的物资运输,对机器人的跨越障碍能力 有较高的要求。对比传统的四轮移动机器人,六轮移动机器人能够提供更强的驱动 力&#…

BBS项目day03、首页(前端文章布局、分类布局、标签布局)、个人站点(前后端实现)

一、首页 路由 from django.contrib import admin from django.urls import path, re_path from app01 import views from django.views.static import serve from django.conf import settingsurlpatterns [path(admin/, admin.site.urls),# 注册path(register/, views.reg…

「跑输」大盘!汽车业务收入同比下滑15%?虹软一站式方案收效甚微

作为国内A股市场为数不多的车载视觉交互概念上市公司,虹软科技的半年报表现,并不乐观。 数据显示,2023年上半年,虹软科技实现营业收入34,019.19万元,同比增长29.73%;归属于上市公司股东的净利润5,003.86万元…

力推C语言必会题目终章(完结篇)

W...Y的主页 😊 代码仓库分享 💕 今天是分享C语言必会题目最终章,全部都是硬货,大家都坐好准备开始喽!!! 编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内…