istio系列:第四章-Ingress网关配置

istio系列:第四章-Ingress网关配置

    • Selector
    • Servers

Gateway在网格边缘接收外部访问,并将流量转发到网格内的服务。Istio通过Gateway将网格内的服务发布成外部可访问的服务,还可以通过Gateway配置外部访问的端口、协议及与内部服务的映射关系。

在istio中,同注入pod之间通讯是通过envoy进行路由的,但是普通pod与istio.pod、外网与istio.pod之间的通讯,有该如何进行那?如果使用k8s原生的service可以进行通讯,但是就无法使用istio中的路由转发、流量限制等功能。那么我们既想可以外网访问又可以使用istio中的功能,该怎么办那?Gatway解决了这个问题。

Gatway的原理与ingress基本类似,都是在内部部署了一个类似于nginx的组件,解析请求hosts然后转发到POD上。

接下来让我们看一下它的具体配置结构

type Gateway struct {
   Servers []*Server 
   Selector map[string]string  
}

Selector

标签选择器,这个我们并不陌生提供了多种标签过滤组件。

这里的作用是对POD进行过滤

Servers

提供了向外开放的端口以及传输协议、绑定hosts(这个将具体讲解)。

type Server struct {
  //暴露的端口、使用的协议
   Port *Port
   Bind string
  //设定请求的hosts,并且与virtualservice绑定,FQDN语法,作用过滤virtualservice中的hosts
   Hosts []string
  // tls设定
   Tls *ServerTLSSettings 
  // 流量应该发送到的环回 IP 端点或 Unix 域套接字
   DefaultEndpoint string 
  // 服务名称
   Name string 
}

接下来让我们重点讲解一下hosts机制

设定gatway公开的域名,通常用于http服务,但是也可以使用与TCP服务。

在istio中也有命名空间的概念,gatway在定义域名(主机)时可以指定作用于的命名空间,这样virtualserivce在使用的过程中就需要进行命名空间的判断。

gatway通过 namespace/ + 域名来设定命名空间,对于hosts来说可以使用FQDN格式,所以我们在日常使用过程时应该尽量使用FQDN格式进行配置。

让我们举个例子

hosts设置了prod/*.example.com,那么VirtualService在使用的过程中指定hosts时可以指定dev.example.com,prod.example.com这些的前提是VirtualService在prod命名空间下或者设置了exportTo。

当hosts设置为*或者.时 代表任何或当前命名空间,比如*/foo.example.com代表所有命名空间下的virtualService都可以使用该gatway

如果我们不设置命名空间的话,比如example.com,那么与.的效果一致

这里其实我们讲解的是ingress gatway(外部访问内部的过程)

那么内部向外部访问的过程又是怎么样的那?为什么内外访问需要两个工具,egress gatway又是什么那?这个让我们在下一章 service-entry 中进行讲解。

你可能感兴趣的:(istio,istio,运维,linux)