首页 > 其他分享 >在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?

在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?

时间:2024-07-24 18:50:49浏览次数:6  
标签:Ingress Kubernetes Service Controller 域名 链路 Pod K8S 请求

在K8S(Kubernetes)中,外部访问容器服务并涉及到一个域名时,整个访问链路会经过多个组件,确保请求能够正确地被路由到目标服务。以下是详细的链路流程和涉及的组件:

1. 链路流程
  1. 域名解析:
    • 当用户在浏览器或客户端输入域名时,首先会进行DNS解析。DNS服务器会将域名解析为对应的IP地址。
    • 在Kubernetes环境中,通常会将域名解析到Ingress Controller的IP地址。Ingress Controller是Kubernetes集群中负责处理外部HTTP(S)流量的组件。
  2. Ingress Controller接收请求:
    • 外部请求通过Internet到达Ingress Controller的IP地址后,Ingress Controller会根据配置的Ingress规则来决定如何路由这些请求。
    • Ingress规则定义了请求的host(域名)、路径(path)以及这些请求应该被转发到的后端服务(Service)。
  3. 路由到Service:
    • 根据Ingress规则,Ingress Controller会将请求转发到对应的Service。Service是Kubernetes中的一个抽象层,它定义了一组Pod的访问策略。
    • Service通过标签选择器(label selector)与一组Pod关联起来,这些Pod共同提供了所需的服务。
  4. 负载均衡到Pod:
    • Service内部会实现负载均衡机制,将请求分发到它关联的一个或多个Pod上。具体的负载均衡算法可以根据Service的配置来选择,如轮询(round-robin)等。
    • Pod内部运行着实际的容器应用,它们会处理传入的请求并返回响应。
  5. 返回响应:
    • Pod处理完请求后,会将响应发送回Ingress Controller。
    • Ingress Controller再将响应返回给原始请求者。
2. 涉及的组件
  • DNS服务器:负责将域名解析为IP地址。
  • Ingress Controller:负责处理外部HTTP(S)流量,并根据Ingress规则将请求路由到后端服务。
  • Ingress:Kubernetes中的资源对象,定义了访问集群内服务的规则。
  • Service:Kubernetes中的抽象层,定义了Pod的访问策略,并实现负载均衡。
  • Pod:Kubernetes中的最小调度单位,包含了一个或多个容器。
  • 容器:实际运行应用的地方,处理传入的请求并返回响应。
3. 注意事项
  • Ingress Controller的选择:Kubernetes本身不直接提供Ingress Controller,但有多种Ingress Controller实现可供选择,如Nginx Ingress Controller、Traefik等。
  • 安全性:在生产环境中,通常会使用HTTPS来加密外部请求,这需要在Ingress Controller中配置TLS证书。
  • 高可用性和扩展性:对于生产环境,需要确保Ingress Controller和Service都具备高可用性和扩展性,以应对高并发请求。

综上所述,通过以上流程和组件的协同工作,Kubernetes能够高效地处理外部对容器服务的访问请求。

标签:Ingress,Kubernetes,Service,Controller,域名,链路,Pod,K8S,请求
From: https://www.cnblogs.com/huangjiabobk/p/18321495

相关文章

  • 在K8S中,cailico的ipip模型和ciliume的vxlan模型除了在具体的实现不同,在原理上有何区别
    在Kubernetes中,Calico的IP-in-IP(IPoverIP)模型和Cilium的VXLAN(VirtualeXtensibleLocalAreaNetwork)模型都旨在解决跨主机通信的问题,但它们在原理上有着本质的区别,这些差异主要体现在数据包的封装、网络层级、性能影响以及网络策略的实施上。1.Calico的IPIP模型原理:IPIP(IP......
  • k8s配置文件之deployment配置
    deployment使用并管理rs,算是更高一层的概念,这是现在比较常用的部署app的方式。deployment为pod和rs提供声明式更新(而非命令式)。支持滚动更新(rollingUpdate),支持回滚操作资源配置主要分五类来定义内容 一:apiVersion【string】 APIVersion定义对象表示的版本,此处为:apps/......
  • [SUCTF 2019]Pythonginx(url中的unicode漏洞引发的域名安全问题)
    @app.route('/getUrl',methods=['GET','POST'])defgetUrl():#从请求中获取url参数url=request.args.get("url")host=parse.urlparse(url).hostname#第一处检查主机名是否为'suctf.cc'ifhost=='s......
  • k8s 服务注册发现原理
    服务(Service)定义:当你在Kubernetes中创建一个服务(Service)资源时,KubernetesAPI服务器会记录这个资源的元数据。Endpoints:Kubernetes通过监控集群中的Pod自动创建与服务相对应的“endpoints”(端点)。Endpoints是指Service后面实际承担服务的Pod的IP和端口。DNS:Kubernetes提供了一个......
  • 自签openssl证书(包含泛域名)
    1、安装openSSLwegethttp://www.openssl.org/source/openssl-1.0.0a.tar.gzTar-zxvfopenssl-1.0.0a.tar.gz(1)进入openssl-1.0.0a目录通过编译方式安装openssl./config-prefix=/www/server/openssl#设置openssl安装路径2、生成自签证书(CA)(推荐在nginx下创建ssl目录)(......
  • 0207-pnet 模拟链路层数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层的数据交换。Cargo.toml[package]edition="2021"name="network"versi......
  • 0208-模拟发送链路层数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层发送一个数据包。网络接口letinterface=dummy::dummy_interface(44);创......
  • K8s - 利用Kubeasz工具快速部署Kubernetes
    Kubeaszhttps://github.com/easzlab/kubeasz/https://github.com/easzlab/kubeasz/releasesKubeasz是一个基于ansible-playbook的Kubernetes二进制方式自动化部署项目,避免纯手工部署kubernetes过程中繁琐易错的步骤。考虑到了国内的网络环境,能够快速地完成Kubernetes......
  • 域名解析到ipv6,并用CF隐藏端口
    要求:域名myhalo.soulio.top​解析到IPv6地址并隐藏端口‍效果:相当于https://myhalo.soulio.top​替代http://[2409:8a62:867:4f12:56c7:5508:f7x6:8]:8080​。唯一缺点是延迟有点高。​​‍难度:需要有一定域名解析、cloudflare使用基础‍实现:按照以下步骤进行操作1......
  • k8s备份恢复之velero
    1.下载并安装velero客户端下载地址:https://github.com/vmware-tanzu/velero/releases#根据项目对应的k8s版本下载对应的版本,我的k8s版本为1.22所以下载1.11.0wgethttps://github.com/vmware-tanzu/velero/releases/download/v1.11.0/velero-v1.11.0-linux-amd64.tar.gztar......