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

k8s-service、endpoints、pod之间是怎么进行网络互通的

k8s-service、endpoints、pod之间是怎么进行网络互通的

  • 1、service
  • 2、endpoints
  • 3、service、endpoints、pod通信图
  • 4、不同服务pod内部间访问

1、service

在K8S中,Service是一种抽象,定义了一组Pod的逻辑集合和访问这些Pod的策略。首先,我们需要创建一个Service,并指定该Service的selector来确定要选中的Pod。
k8s集群也会为service分配个cidr,每个service都有对应的IP。
查看service。

 kubectl get svc
[root@k8s-node2 k8s]# kubectl get svc 
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        33h
nginx        NodePort    10.102.104.249   <none>        80:30940/TCP   5h20m

查看指定service详情。

kubectl describe svc nginx 
[root@k8s-node2 k8s]# kubectl describe svc nginx 
Name:                     nginx
Namespace:                default
Labels:                   app=nginx
Annotations:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.102.104.249
IPs:                      10.102.104.249
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30940/TCP
Endpoints:                10.244.169.129:80,10.244.36.65:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

2、endpoints

Endpoints是将Service与其后端Pod关联的方式。我们需要在创建Service后,自动创建与Service相关的Endpoints。

查看ep,可以发现,nginx 对应的endpoints是pod的ip地址和端口, 也就是访问nginx的service时,会自动映射到pod上

[root@k8s-node2 k8s]# kubectl get ep
NAME         ENDPOINTS                           AGE
kubernetes   192.168.8.132:6443                  33h
nginx        10.244.169.129:80,10.244.36.65:80   5h22m

3、service、endpoints、pod通信图

盗用的大佬的,哈哈
在这里插入图片描述

4、不同服务pod内部间访问

比如,部署了nginx和mysql。 从nginx的pod要去访问mysql,直接可以访问mysql的service的name去访问。

演示,服务间通信,我是用busybox的pod去访问nginx。

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  labels:
    purpose: demonstrate-busybox
spec:
  containers:
  - name: busybox
    image: busybox
    command:
      - sleep
      - "3600"
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
kubectl apply -f busybox.yaml

进入busybox容器

kubectl exec -it busybox -- sh

虽然service有IP,但是一般都是通过nginx的service的name访问nginx服务的

wget http://nginx

访问成功
在这里插入图片描述


注意:不同pod服务之间可以跨命名空间去访问的,访问格式,service的name.命名空间name,nginx放到默认命名空间default里的。

wget http://nginx.default

http://www.kler.cn/a/388417.html

相关文章:

  • three.js 杂记
  • 【Webpack实用指南】如何拆分CSS资源(2)
  • 数据结构-集合
  • 多叉树笔记
  • 鸿蒙进阶篇-属性动画-animateTo转场动画
  • Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘
  • Vue 状态管理工具vuex
  • 贪心算法:经典活动安排问题
  • 【人工智能训练师】7 大数据处理与应用
  • Java什么是变量?变量有什么用?
  • MongoDB新版本,单节点安装
  • 【网络安全 | 服务器】Nginx功能快速入门
  • python视频事物分析
  • AMD-OLMo:在 AMD Instinct MI250 GPU 上训练的新一代大型语言模型。
  • C#语言在软件开发中的应用与优势
  • 【鸿蒙学习】HarmonyOS应用开发者高级认证 - 认证通过(附题目)
  • Vue 中的定时刷新与自动更新实现
  • Android Framework 框架层主要功能类的基本介绍
  • 「QT」几何数据类 之 QPolygonF 浮点型多边形类
  • 第十六章 TCP 客户端 服务器通信
  • 关于若依500验证码问题的求助
  • WPS Office手机去广高级版
  • PostgreSQL pg-xact(clog)目录文件缺失处理
  • MyBatis5-缓存
  • SpringBoot中使用Thymeleaf模板引擎
  • C# 选择导入文件的路径、导出文件的路径