五分钟 K8S 实战- Istio 网关

我们访问这个域名即可拿到响应,同时我们打开 k8s-combat-service-istio-mesh​ service 的 Pod 查看日志,会发现所有的请求都进入了 v1, 如果不需要这个限制条件,将 subset: v1 删除即可。

我们访问这个域名即可拿到响应,同时我们打开 k8s-combat-service-istio-mesh​ service 的 Pod 查看日志,会发现所有的请求都进入了 v1, 如果不需要这个限制条件,将 subset: v1 删除即可。

在上一期k8s-服务网格实战-配置 Mesh中讲解了如何配置集群内的 Mesh 请求,Istio 同样也可以处理集群外部流量,也就是我们常见的网关。

图片图片

其实和之前讲到的k8s入门到实战-使用IngressIngress作用类似,都是将内部服务暴露出去的方法。

只是使用Istio-gateway会更加灵活。

图片图片

这里有一张功能对比图,可以明显的看出Istio-gateway支持的功能会更多,如果是一个中大型企业并且已经用上 Istio 后还是更推荐是有Istio-gateway,使用同一个控制面就可以管理内外网流量。

创建 Gateway

开始之前首先是创建一个Istio-Gateway的资源:

apiVersion: networking.istio.io/v1alpha3  
kind: Gateway  
metadata:  
  name: istio-ingress-gateway  
  namespace: default  
spec:  
  servers:  
    - port:  
        number: 80  
        name: http  
        protocol: HTTP  
      hosts:  
        - 'www.service1.io'  
  selector:  
    app: istio-ingressgateway #与现有的 gateway 关联  
    istio: ingressgateway

其中的selector选择器中匹配的 label 与我们安装Istio时候自带的gateway关联即可。

# 查看 gateway 的 label
k get pod -n istio-system
NAME                                    READY   STATUS
istio-ingressgateway-649f75b6b9-klljw   1/1     Running

k describe pod istio-ingressgateway-649f75b6b9-klljw -n istio-system |grep Labels
Labels:           app=istio-ingressgateway

图片图片

这个Gateway在我们第一次安装Istio的时候就会安装这个组件。

这个配置的含义是网关会代理通过www.service1.io这个域名访问的所有请求。

之后需要使用刚才的 gateway 与我们的服务的 service 进行绑定,这时就需要使用到VirtualService:

apiVersion: networking.istio.io/v1alpha3  
kind: VirtualService  
metadata:  
  name: k8s-combat-istio-http-vs  
spec:  
  gateways:  
    - istio-ingress-gateway # 绑定刚才创建的 gateway 名称 
  hosts:  
    - www.service1.io
http:
- name: default  
  route:  
    - destination:  
        host: k8s-combat-service-istio-mesh  #service 名称
        port:  
          number: 8081  
        subset: v1

这个和我们之前讲到的 Mesh 内部流量时所使用到的VirtualService配置是一样的。

这里的含义也是通过www.service1.io以及istio-ingress-gateway网关的流量会进入这个虚拟服务,但所有的请求都会进入subset: v1这个分组。

这个的分组信息在上一节可以查询到:

apiVersion: networking.istio.io/v1alpha3  
kind: DestinationRule  
metadata:  
  name: k8s-combat-service-ds  
spec:  
  host: k8s-combat-service-istio-mesh  
  subsets:  
    - name: v1  
      labels:  
        app: k8s-combat-service-v1  
    - name: v2  
      labels:  
        app: k8s-combat-service-v2

之后我们访问这个域名即可拿到响应,同时我们打开k8s-combat-service-istio-meshservice 的 Pod 查看日志,会发现所有的请求都进入了 v1, 如果不需要这个限制条件,将subset: v1删除即可。

curl  http://www.service1.io/ping

本地需要配置下 host:127.0.0.1 www.service1.io

图片图片

还有一点,我们需要拿到gateway的外部IP,才能将 IP 和刚才的域名www.service1.io进行绑定(host,或者是域名管理台)。

如果使用的是docker-desktop自带的kubernetes集群时候直接使用127.0.0.1即可,默认就会绑定上。

如果使用的是minikube安装的,那需要使用minikube tunnel手动为 service 为LoadBalancer类型的绑定一个本地 IP,具体可以参考文档:https://minikube.sigs.k8s.io/docs/tasks/loadbalancer

如果是生产环境使用,云服务厂商会自动绑定一个外网 IP。

原理

图片图片

这个的访问请求的流程和之前讲到的kubernetes Ingress流程是类似的,只是 gateway 是通过VirtualService来路由的 service,同时在这个VirtualService中可以自定义许多的路由规则。

总结

服务网格Istio基本上讲完了,后续还有关于Telemetry相关的trace、log、metrics会在运维章节更新,也会和 Istio 有所关联。感兴趣的朋友可以持续关注。

本文的所有源码在这里可以访问:https://github.com/crossoverJie/k8s-combat

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年11月17日 00:16
下一篇 2023年11月17日 00:16

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信