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

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

1、service

在K8S中,Service是一种抽象,定义了一组Pod的逻辑集合和访问这些Pod的策略。首先,我们需要创建一个Service,并指定该Service的selector来确定要选中的Pod。

k8s集群也会为service分配个cidr,每个service都有对应的IP。

查看service。

bash 复制代码
 kubectl get svc
bash 复制代码
[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详情。

bash 复制代码
kubectl describe svc nginx 
bash 复制代码
[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上

bash 复制代码
[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。

bash 复制代码
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"
bash 复制代码
kubectl apply -f busybox.yaml

进入busybox容器

bash 复制代码
kubectl exec -it busybox -- sh

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

bash 复制代码
wget http://nginx

访问成功

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

bash 复制代码
wget http://nginx.default
相关推荐
CHANG_THE_WORLD38 分钟前
TCP 三次握手彻底解析:SYN、ACK、SEQ、确认号与状态迁移
网络·网络协议·tcp/ip
DLYSB_2 小时前
基于 HTTP API 与 Modbus 协议的多源监控声光语音联动告警系统设计与实现
网络·网络协议·http·报警灯
Bobolink_3 小时前
手机端和电脑端的网络环境配置有什么不同?
网络·智能手机·电脑·网络环境
星恒讯工业路由器4 小时前
三大工业以太网协议选型对比
网络·物联网·ethercat·profinet·ethernet/ip·工业以太网协议
春卷同学4 小时前
HarmonyOS掌上记账APP开发实践第25篇:Image 组件高级用法 — 资源引用、网络图片与首字符占位方案
网络·华为·harmonyos
mounter6254 小时前
从内存隔离到运行时防线:透视 Linux 内核安全强化的博弈与演进
linux·网络·安全·linux kernel·kernel
Bug退散师6 小时前
多路IO复用[select版TCP服务器与poll版TCP服务器]与常用网络编程函数详解
linux·服务器·c语言·网络·驱动开发·tcp/ip
刘马想放假6 小时前
Docker 从入门到进阶:一篇写给工程师的系统化实战指南
运维·docker·容器
Acrellea7 小时前
固态变压器(SST)热管理破局:安科瑞交直流专属测温方案护航无人值守运维
运维·网络
zjun30217 小时前
如何搭建TRAE IDE 连接到容器开发环境
docker·容器·ascend·trae