当前位置: 首页 > news >正文

k8s-Pod中的网络通信(3)

部署的pod都会涉及到和内外网络通信,我们部署的pod 有一个ip,这个IP 是集群内部的IP ,只能在集群内被访问,k8s中pod的网路通信是交给service来管理的,简称svc。负责将外部流量引入,和内部流量引出。

1.外部流量访问内部

我们pod部署的时候是有一个标签label的,service在创建的时候也会指定一个标签,这样就可以把对应label的pod关联起来,podIP+端口形成一个端点-ednpoint,service也有自己的IP和端口,service的端口和宿主机的端口通过NodePort形成映射,这样访问宿主机的端口就能访问到service,service再转发到对应的pod上。

service的这能力都是kude-proxy来实现的(部署k8s的时候对应的有一个kube-proxy:v1.28.15镜像)。kude-proxy最终会把这这些映射规则转化成iptables规则,来完成流量的转发。

image

创建service的方式

命令:expose

清单文件:apply -f 文件

kubectl expose deployment my-nginx-deploment --port=8001 --target-port=80 --type=NodePort

创建一个service将流量引入到my-nginx-deploment部署的pod上,

--port是service暴露的端口,

--target-port是背后实际应用容器的端口,我们部署的nginx是80端口

--type=NodePort 映射到宿主机端口 取值有这几个 ClusterIP, NodePort, LoadBalancer, or ExternalName. Default is 'ClusterIP'.

kubectl expose deployment my-nginx-deploment --port=8001 --target-port=80 --type=NodePort --dry-run=client -o yaml > my-nginx-svc.yaml

image

apply -f my-nginx-svc.yaml

kubectl get svc 查看service

kubectl describe svc my-nginx-deploment 查看详细的信息

image

启了一个service 给svc分配的ip是 10.108.229.67 这个IP 也是集群内部的IP,端口8001,指向了10.244.2.6:80,

在集群其他节点可以访问这个地址curl 10.104.212.94:8001 也能访问我们之前启动的nginx

集群外部访问的话就需要用到NodePort暴露的端口

任意node宿主机节点IP:NodePort暴露的端口

我的是

192.168.255.102:31101

192.168.255.103:31101

都可以访问到我们部署k8s里面的nginx了

image

2.内部访问外部:

pod——service——endpoint——外部服务

外部访问内部的时候endpoint 是pod的IP和端口,k8s自己可以知道是啥,内部访问外部的,走出去的时候K8s就不知道关联外部的endpoint了,这就需要手工配置endpoint了

image

我在vmware宿主机 IP:192.168.255.1 上面部署一个nginx:

image

创建资源清单文件:out-ng.yaml 内容如下

复制代码

apiVersion: v1

kind: Service

metadata:

name: out-ng

spec:

ports:

- port: 80

targetPort: 80

# 注意:没有 selector!

---

apiVersion: v1

kind: Endpoints # 手动配置的端点

metadata:

name: out-ng # 必须和 Service 同名!

subsets:

- addresses:

- ip: 192.168.255.1 # 外部服务的 IP

ports:

- port: 80

复制代码

kubectl apply -f out-ng.yaml

image

分配给service 的ip是 10.107.74.203 对应端点的是192.168.255.1:80

进入我们之前的pod里面,再访问service 的ip,就能看到访问到了我们外面机器部署的nginx

kubectl exec my-nginx-deploment-799c59bc4d-nkgbc -it -- /bin/bash

curl 10.107.74.203

image

http://www.cnnetsun.cn/news/40685.html

相关文章:

  • DeepSeek-R1-Distill-Qwen-7B集群部署终极指南:轻松搞定AI推理服务
  • 风储调频在Matlab/Simulink中的探索:基于四机两区系统的实践
  • 基于Java Swing的猜数字小游戏(2)
  • 提升 Web 端 JavaScript 的可信度:WAICT 体系详解
  • Solon (可替换 SpringBoot)集成 Docker 实战:30分钟搞定轻量级应用容器化部署
  • 一次 React 项目 lock 文件冲突修复:从 Hook 报错到 Vite 配置优化
  • 记录一次USB虚拟网络问题排查
  • 学Simulink——基于高比例可再生能源渗透的复杂电网建模场景实例:大规模光伏并网对区域电网频率稳定影响研究
  • CANN Samples(十九):特色场景:机器人 AI 绘画 手写识别等
  • 毕设开源 深度学习YOLO交通路面缺陷检测系统(源码+论文)
  • 【URP】Unity[后处理]色彩调整ColorAdjustments
  • Flutter混合开发与WebView集成实战
  • 压缩空气储能和释能阶段模型,附相关文档文献。 建立了压缩空气储能系统中的压缩机、换热器、储气罐...
  • Profinet转Modbus TCP工业数据采集网关:实现1200PLC 与打标卡数据实时传输
  • Flutter 2025 国际化与本地化实战:从多语言支持到文化适配,打造真正全球化的用户体验
  • P1178 到天宫做客 题解
  • 2025年GEO优化机会与争议以及规范发展的必要性
  • 2026老年春晚怀化区域节目征集启动仪式在怀化学院举行
  • 【笔记篇】【硬件基础篇】电力电子元器件应用手册 阅读笔记(1)电阻器及其应用
  • 柠檬 软件测试之python全栈自动化测试工程师第25期
  • 为什么你的视觉AI项目总是耗时又低效?Florence-2-large-ft一站式解决方案
  • 基于php的微信小程序的学习交流平台系统(源码+lw+部署文档+讲解等)
  • springboot高校读书分享系统的设计与实现_34ur7fyk-
  • 如何快速解锁RouterOS无限权限:MikroTikPatch的终极指南
  • 测试工程师的增值型职业休假策略:从技术深耕到跨界突破
  • USART串口
  • SDET职业生涯中的关键决策点与路径选择
  • 第三方API密集型聚合服务的测试体系构建
  • System Informer:你的Windows系统管家,3大核心功能深度解析
  • 探索城市脉搏:解密共享单车数据背后的故事