news 2026/4/2 15:48:18

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 17:07:41

思岚Aurora基础使用之数据可视化篇

思岚Aurora基础使用之数据可视化篇在我们能够从雷达得到数据之后,我们就可以用openCV对其进行可视化,方便我们观察数据的趋势。所以本篇文章介绍如何进行可视化这一操作。数据的可视化,其实就是在一块画布上显示出一些数据信息,所…

作者头像 李华
网站建设 2026/4/1 18:43:55

代码复杂度的代价远比你想象得大

引言:复杂度的代价远比你想象得大在 Java 后端系统演进过程中,代码复杂度是影响可维护性、稳定性和迭代效率的核心因素。然而,复杂度往往被忽视,直到一次“小改动”引发线上事故,才被重新审视。本文以“复杂度战争”为…

作者头像 李华
网站建设 2026/3/31 5:46:06

Open Interface:三分钟实现电脑全自动驾驶的终极指南

Open Interface:三分钟实现电脑全自动驾驶的终极指南 【免费下载链接】Open-Interface Control Any Computer Using LLMs 项目地址: https://gitcode.com/gh_mirrors/op/Open-Interface 还在为重复性电脑操作烦恼吗?想让AI助手帮你完成所有繁琐任…

作者头像 李华
网站建设 2026/3/29 7:34:32

PDFKit跨平台字体兼容性终极解决方案:完整指南

PDFKit跨平台字体兼容性终极解决方案:完整指南 【免费下载链接】pdfkit 项目地址: https://gitcode.com/gh_mirrors/pdf/pdfkit PDFKit作为Node.js生态中功能强大的PDF生成库,在实际跨平台部署中常常面临字体兼容性挑战。本文将提供一套完整的解…

作者头像 李华
网站建设 2026/4/2 12:28:02

三相维也纳整流器仿真手记

三相维也纳整流器的仿真模型。控制算法采用电压和电流双闭环控制。外部电压环路为PI控制器,内部电流环路为bang bang滞后控制器。 网侧单位功率因数运行,电网电流谐波非常小。最近在实验室折腾维也纳整流器的仿真模型,这拓扑结构确实有点意思…

作者头像 李华