• k8s~ingress_service_endpoint_pod四壮士


    在Kubernetes中,Service和Endpoints是两个重要的概念,它们之间存在着密切的关系。

    • Ingress:Ingress是一个k8s环境的网关,正常情况下,你外部的流量应该先指向ingress所有节点的IP,ingress的端口默认是80(http)和443(https),然后再由ingress进行域名传发到具体的service或者deployment上面。在rancher中,ingress一般以deamonset的形式部署在每个节点上,而很多文章更建议我们,ingress通过deployment的形式部署到k8s的工作节点上。

    • Service:Service是Kubernetes中用于定义一组Pod的访问方式的抽象。通过创建Service,可以为一组具有相同标签的Pod提供统一的访问入口,使得客户端可以通过Service来访问这些Pod,而无需了解其具体的IP地址和端口号。Service通过标签选择器(selector)来选择匹配的Pod,并将请求转发到这些Pod上。

    • Endpoints:Endpoints是Kubernetes中的另一个资源对象,它存储了与一个Service相关联的实际后端Pod的列表和对应的网络终结点信息(即IP地址和端口号)。当Service被创建时,Kubernetes会自动管理Endpoints对象,将与Service标签选择器匹配的Pod的IP地址和端口号信息存储在Endpoints中。

    因此,Service和Endpoints之间的关系可以总结为:Service定义了一组Pod的访问方式,而Endpoints则存储了这些Pod的实际网络终结点信息,Service通过Endpoints来实现对后端Pod的负载均衡和代理转发。

    • Pod:Pod是kubernetes的最小管理单元,它有自己的IP地址,它的IP地址会被endpoints存储与管理,当pod没有达到健康时,endpoint会把这个pod ip从列表中移除,service在进行负载到pod时,也是通过这个endpoint进行的,从而实现了负载均衡和健康检查。

    ingress,service,endpoints和pod四者关系

    在这个示意图中,Ingress定义了对外部流量的访问规则,包括主机名(host)和路径(path)等。Ingress通过指向一个Service来实现流量的转发。Service根据自身的selector选择与之匹配的Pod,并将请求转发到这些Pod上。Endpoints存储了与Service相关联的后端Pod的IP地址和端口信息,而Pod则是应用程序运行的实际容器。

    因此,Ingress定义了对外部流量的访问规则,Service提供了对后端Pod的访问入口,Endpoints存储了这些后端Pod的网络终结点信息,而Pod是应用程序实际运行的地方。

    endpoint显示的ip是谁的?

    Pod在Kubernetes中是有自己的IP地址的,这个IP地址通常由Kubernetes的网络插件(如Calico、Flannel等)负责分配和管理。每个Pod都会被分配一个独立的IP地址,用于在集群内部进行通信。

    而Endpoints对象存储的是与Service关联的后端Pod的IP地址和端口信息,它记录了Service需要代理的实际后端Pod的网络终结点信息。Endpoints并不存储所有Pod的IP地址,而是仅存储与特定Service相关联的Pod的IP地址和端口信息。

    因此,可以说Pod具有自己的IP地址,并且Endpoints对象存储了与Service相关的Pod的IP地址和端口信息。

    • 这是一个pod的信息
    [root@lind~]# kubectl describe  pod envoy-deployment-786c44794b-rb6wm -n=default
    Name:         envoy-deployment-786c44794b-rb6wm
    Namespace:    default
    Priority:     0
    Node:         192.168.60.1/192.168.60.1
    Start Time:   Tue, 19 Dec 2023 09:54:24 +0800
    Labels:       app=envoy
                  pod-template-hash=786c44794b
                  workloadID_ingress-10aa232e236bc59c6a7d7d59053154a8=true
                  workloadID_ingress-c7fdea094d8b2ab0912781e0867ce277=true
    Annotations:  cattle.io/timestamp: 2023-12-19T01:54:22Z
                  cni.projectcalico.org/podIP: 10.42.0.150/32
                  cni.projectcalico.org/podIPs: 10.42.0.150/32
                  field.cattle.io/ports:
    
    
    • 这是对应的endpoint的信息
    [root@lind~]# kubectl get endpoints -n=default
    NAME                                       ENDPOINTS                                                                 AGE
    envoy-service                              10.42.0.150:9901,10.42.0.150:10000                                        70d
    
    • 这是对应的service的信息
    [root@lind~]# kubectl get svc -n=default
    NAME                                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                          AGE
    envoy-service                              NodePort    10.43.189.206           9901:25568/TCP,10000:13908/TCP   70d
    
    • 这是对应的ingress的信息
    [root@lind~]# kubectl get ingress -n=default
    NAME                            CLASS    HOSTS                           ADDRESS                                        PORTS   AGE
    envoy-final-kc               test.xxx.com             192.168.60.2,192.168.60.3,192.168.60.4                80      13d
    

    好了,今天的k8s四壮士的文章就写到这里吧,感谢阅读!

  • 相关阅读:
    CAS Java实现与原理
    UE构建基础和实践:一、概述
    [附源码]计算机毕业设计JAVA放肆游旅游网
    您的应用存在隐藏最近任务列表名称的行为,不符合华为应用市场审核标准
    智慧文旅:引领旅游产业智慧升级的创新模式
    【后端】Ubuntu开放mysql端口访问;如何开放服务器mysql给其他ip使用;在Ubuntu/Linux环境下开放3306端口
    MatPlotlib入门
    dubbo从入门到精通
    基于Java+Spring+Vue+elementUI大学生求职招聘系统详细设计实现
    找不到d3dx9_43.dll如何修复?d3dx9_43.dll丢失的解决办法分享
  • 原文地址:https://www.cnblogs.com/lori/p/17919788.html