k8s service类型理解

cluster ip(hostname->clusterip->pod ip)

访问流程:

1.客户端通过DNS(coreDNS)查找服务的clusterip

2.客户端将请求发送到服务的clusterip(虚拟ip),如果访问的端口和service定义的端口一样,那么访问会被处理。

3.kube-proxy在节点上监听该端口。

4.kube-proxy(一般通过轮转方式选择)kube-proxy 根据 Selector 选择一组 Pod,根据自身 mode 选择其中一个 Pod,并且转发到pod的ip和port(targetport)

5.后端pod处理请求并响应发送回客户端。

在这里插入图片描述

pod内访问一个service时,一般对Hostname发起请求

Hostname:.

​ dns kube-proxy

NodePort: (hostname–>nodeip-----> pod ip)

1.客户端通过DNS(coreDNS)查找服务的nodeip

2.客户端将请求发送到服务的Nodeip(虚拟ip)和Nodeport端口

3.kube-proxy在节点上监听该端口。

4.kube-proxy(一般通过轮转方式选择)kube-proxy 根据 Selector 选择一组 Pod,根据自身 mode 选择其中一个 Pod,并且转发到pod的ip和port(targetport)

5.后端pod处理请求并响应发送回客户端。

​ DNS

在这里插入图片描述

Headless(hostname–> pod ip):

Headless 服务的优点是:

  • 安全性高,因为客户端无法直接访问后端 Pod,只能通过 DNS 来访问。
  • 性能好,因为请求直接发送到后端 Pod,而不需要经过 kube-proxy 的转发。

Headless 服务的缺点是:

  • 客户端无法直接访问后端 Pod 的 IP 地址,只能通过 DNS 来访问。

在这里插入图片描述

Deployment和StatefulSet

deployment适合无状态服务,而statefulset适合有状态服务。

无状态服务是不需要保存状态的服务。这意味着每个 Pod 都是独立的,它们之间没有任何关联。无状态服务适用于以下场景:

  • Web 应用程序
  • 缓存服务
  • 消息处理服务

有状态服务是需要保存状态的服务。这意味着每个 Pod 都需要共享相同的状态。有状态服务适用于以下场景:

  • 数据库
  • 文件系统
  • 消息队列
ingress类型
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-service
          servicePort: 80

yaml文件中的域名解析到service

如果service是clusterip,那么serviceport是pod的port,如果是nodeport,那么serviceport是nodeport

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值