前言

在Istio的世界里,如果想把外部的请求流量引入网格,你需要认识并会学会配置Istio Ingress Gateway

什么是Ingress Gateway

由于Kubernetes  Ingress API只能支持最基本的HTTP路由,使用Kubernetes Ingress资源来配置外部流量的方式不能满足需求。因此Istio v1alpha3 routing API引入新的Istio Ingress Gateway取代Kubernetes  Ingress。

Gateway为HTTP/TCP流量配置了一个负载均衡,用于承载网格边缘的进入和发出连接。在同一个网格中可以有多个不同的gateway存在。这一规范中描述了一系列开放端口,以及这些端口所使用的协议、负载均衡的 SNI 配置等内容。用户可以利用标准的Istio 路由规则控制HTTP和TCP请求进入网格。

从下图可以看到Istio gateway在整个网格中的使用情况:

如何配置Gateway控制Ingress流量

如果你已经安装好了bookinfo的应用,为了能在外部访问bookinfo中的productpage服务,只需要配置Gateway和相关的VirtualService。

用一个简单的gateway配置一个负载均衡使访问bookinfo.com的外部http流量能够进入网格:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway
  servers:  
  - hosts:
    - bookinfo.com    
    port:
      number: 80      
      name: http      
      protocol: HTTP

为了配置相应的路由,需要为相同的host定义一个VirtualService 并且用配置中gateways的字段绑定到刚才创建的Gateway:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:  
  - bookinfo.com  
  gateways:  
  - bookinfo-gateway # <---- 绑定gateway  
  - mesh # <----对内部通信进行流量控制  
  http:  
  - match:
   - uri:
      exact: /productpage
    route:    
    - destination:
       host: productpage         
       port:         
         number: 9080

这样就达到了在外网开放productpage服务的目的。

如何用HTTPS加密Gateway?

我们也可以为服务启用TLS保护,以HTTPS的形式对网格外提供服务。

首先需要使用工具生成客户端和服务器端的证书和密钥。然后使用密钥和证书作为输入,创建一个Secret。

$ kubectl create -n istio-system secret tls istio
-ingressgateway-certs --key key.pem --cert cert.p
em

接下来修改Gateway对象,为Ingress gateway开放一个443端口,用于提供HTTPS服务:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
 name: bookinfo-gateway
spec:  
  selector: 
   istio: ingressgateway  
  servers:  
  - hosts:    
    - bookinfo.com    
    port:      
      number: 80      
      name: http      
      protocol: HTTP   
    - hosts:   
      - "*"    
      port:      
        number: 443      
        name: https      
        protocol: HTTPS    
      tls:      
        mode: SIMPLE      
        serverCertificate: /etc/istio/ingressgateway-certs/tls.crt      
        privateKey: /etc/istio/ingressgateway-certs/tls.key

这样简单的配置就可以通过HTTPS协议访问bookinfo.com了。

idou老师教你学Istio 09: 如何用Istio实现K8S Ingress流量管理的更多相关文章

  1. idou老师教你学Istio11 : 如何用Istio实现流量熔断

    在之前的最佳实践中,已经带大家通过一系列的实践任务领略了Istio的无穷魅力.今天,将向大家介绍如何用Istio实现流量熔断. 熔断机制是创建弹性微服务应用程序的重要模式.熔断可以帮助您自由控制故障影 ...

  2. idou老师教你学Istio 07: 如何用istio实现请求超时管理

    在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过一个简 ...

  3. idou老师教你学Istio 04:Istio性能及扩展性介绍

    Istio的性能问题一直是国内外相关厂商关注的重点,Istio对于数据面应用请求时延的影响更是备受关注,而以现在Istio官方与相关厂商的性能测试结果来看,四位数的qps显然远远不能满足应用于生产的要 ...

  4. idou老师教你学istio1:如何为服务提供安全防护能力

    之前,已为大家介绍过 Istio 第一主打功能---连接服务. 凡是产生连接关系,就必定带来安全问题,人类社会如此,服务网格世界,亦是如此. 今天,我们就来谈谈Istio第二主打功能---保护服务. ...

  5. idou老师教你学Istio :如何用istio实现监控和日志采集

    大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...

  6. idou老师教你学istio :基于角色的访问控制

    istio的授权功能,也称为基于角色的访问控制(RBAC),它为istio服务网格中的服务提供命名空间级别.服务级别和方法级别的访问控制.基于角色的访问控制具有简单易用.灵活和高性能等特性.本文介绍如 ...

  7. idou老师教你学Istio 17 : 通过HTTPS进行双向TLS传输

    众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份,为客户端和服务器端之间建立“SSL”通道,确保数据运输 ...

  8. idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理

    本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio 集群中的客户端,目前有两种方案: ...

  9. idou老师教你学Istio:如何用 Istio 实现速率限制

    使用 Istio 可以很方便地实现速率限制.本文介绍了速率限制的使用场景,使用 memquota\redisquota adapter 实现速率限制的方法,通过配置 rule 实现有条件的速率限制,以 ...

随机推荐

  1. 图像Resize中0.5像素中心对齐的问题

    目录 0.5像素对齐的问题 0.5像素对齐的问题 1. 问题提出 在进行图像缩放时,偶尔会看到一些比较奇怪的代码,其中有一个就是0.5像素中心对齐的问题,例如在OpenCV线性插值的代码中有类似如下操 ...

  2. DSP6455的EMIFA口

    DSP6455的EMIFA口 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 支持两种不同的接口模式: 异步接口:标准的SRAM,ROM接口 同步接口:SBS ...

  3. 最新 二三四五java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.二三四五等10家互联网公司的校招Offer,因为某些自身原因最终选择了二三四五.6.7月主要是做系统复习.项目复盘.Leet ...

  4. JDK+Jmeter 环境搭建

    1.下载JDK安装包,默认安装next即可 2. 3. 4. 5. 6.变量名:JAVA_HOME 变量的值为你安装JDK的目录 我这里是放在C盘 7. 8.添加新的变量值: %JAVA_HOME%\ ...

  5. JDK替换掉系统自带的gij编译工具

    解决办法: 在终端里面依次输入以下两句话 alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_11/bin/java 300 al ...

  6. [转帖]Oracle报错ORA-26563--当重命名表时碰到物化视图

    Oracle报错ORA-26563--当重命名表时碰到物化视图 https://www.toutiao.com/i6739137279115133447/ 原创 波波说运维 2019-09-26 00 ...

  7. Feign【开启GIZP压缩】

    SpringCloudFeign支持对请求和响应进行gzip压缩,以此来提高通信效率. 1.搭建gzip-demo工程 1.1.工程依赖: <parent> <groupId> ...

  8. Python--yaml文件操作

    一.yaml文件的使用注意事项 加载yaml文件函数: data = yaml.load(f)  (我在实际测试中用的是yaml.safe_load(f)可以正常,用yaml.load(f)会报错因为 ...

  9. Django dumpdata and loaddata

    目录 dumpdata 命令 dumpdata 基本数据库的转存 dumpdata 备份特定的 app dumpdata 备份特定的表 dumpdata (--exclude) dumpdata (- ...

  10. 通过pip命令导出和导入Python环境安装包

    我们在开发完代码后,一般需要将依赖包导出,然后在移植到其他系统使去安装,保证环境正常   导出Python环境安装包[root@bogon ~]# pip freeze > packages.t ...