5-4 kubernetes的服务发现

 K8S 的访问情况大致有分为3种

1、集群内部

1.1 DNS+ ClusterIP

1.2 Headless(HeadlessService)

2、集群内--> 集群外

2.1 IP+Port

2.2 OutService

3、集群外--> 集群内

3.1 NodePort     # 有多少相同的端口都同时访问

3.2 HostPort     # 一对一绑定访问

3.3 Ingress(IngressController) 

 

三个访问方式

1、集群内部互访,PodA -> PodB

2、集群内部访问集群外部 PodA->外部 MySQL

3、集群外部访问集群内部

分情况说明方案:

1、集群内部互访

 

  • 方案1:每个 Pod 都会被分配一个 ClusterIP,Pod 之间可以通过 IP 直接访问,但 Pod 重启后,IP 会变化,并且无法对 PodB 多个服务同时访问
  • 方案2:DNS+ClusterIP利用 K8S 的 DNS 和 Service,将 PodB 处理为 Service,例如叫做 SerB,此时 PodA 可直接访问 SerB 来实现访问,K8S 的 DNS 会将 SerB 解析到对应的 IP, 并实现负载均衡
  • 方案3:HeadlessService, 返回Pod列表,PodA拿到Pod列表后,自己进行负载均衡和其他的处理

2、集群内部访问集群外部

 

  • 2.1:直接访问外部服务的 IP 和端口
  • 2.2:通过 Service, 定义一个 ServiceMySQL,然后定义一个相同的 Endpoint ServiceMysql, Endpoint 中定义的是外部服务的具体地址,K8S 的 DNS 此时会将 ServiceMysql 解析到 Endpoint地址,外部 MySQL 地址如果有变化,修改 Endpoint 地址即可,对于客户端来说,跟访问内部 Service 没有区别

3、集群外部服务访问集群内部的服务

 

  • 3.1 NodePort: Service 的一种类型,除了 cluseterIP 之外,会在每个 Worker 节点上暴露一个端口,若节点上没有运行内部Pod服务,NodePort 会将请求终转发会运行Pod服务的Worker节点去,NodePort 方式不太推荐
  • 3.2 HostPort: Service 的另一种类型,只会在运行了 Pod 的 Worker 上启动端口,客户端必须访问指定的Worker的端口,访问其他的Worker不行
  • 3.3 Ingress: Service 的另一种类型,Ingress 需要配置一下内容:
    • 域名
    • 域名的请求的路径
    • 这个请求转发到的 Service 名称
    • 最后由 IngressController 完成域名和请求的转发
posted @ 2021-02-20 10:56  王竹笙  阅读(78)  评论(0编辑  收藏  举报