首页 > 其他分享 >五分钟k8s实战-Istio 网关

五分钟k8s实战-Istio 网关

时间:2023-11-15 14:15:52浏览次数:52  
标签:网关 service Istio istio io k8s gateway

istio-03.png

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

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

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

这里有一张功能对比图,可以明显的看出 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

image.png

这个 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-mesh service 的 Pod 查看日志,会发现所有的请求都进入了 v1, 如果不需要这个限制条件,将 subset: v1 删除即可。

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

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

image.png

还有一点,我们需要拿到 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。

原理

image.png

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

总结

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

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

标签:网关,service,Istio,istio,io,k8s,gateway
From: https://www.cnblogs.com/crossoverJie/p/17833668.html

相关文章

  • 【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header
    问题描述在APIMGateway日志中,对于发送到APIMHost的请求,只记录了一些常规的URL,Status,Time,IP等信息。关于请求Header,Body中的信息,因为隐私保护的原因,默认没有记录。[Info]2023-11-16T06:19:28.482[GatewayLogs],isRequestSuccess:True,totalTime:2196,category:......
  • SpringCloud系列八之微服务网关安全认证-JWT篇
    Gateway-JWT认证鉴权流程一、网关认证件鉴权流程目前主流的结合微服务网关及JWT令牌开发用户认证及服务访问鉴权的流程如下:用户认证流程:用户向网关发送登录认证请求,网关将请求转发给认证服务。认证服务校验用户登录信息(用户密码、短信及图片验证码)等信息之后,如果校验成功颁发一......
  • k8s 删除Terminating状态的namespace
    查看ns状态root@test-10-5-2-15:~#kubectlgetnsNAMESTATUSAGEcert-managerTerminating19h查看该命名空间下的资源kubectlapi-resources-oname--verbs=list--namespaced|xargs-n1kubectlget--show-kind--ignore-not-found-n......
  • 安装Kubernetes(k8s)
    安装Kubernetes(k8s)保姆级教程---无坑版一、安装环境说明硬件要求内存:2GB或更多RAMCPU:2核CPU或更多CPU硬盘:30GB或更多本次环境说明:操作系统:CentOS7.9内核版本:3.10.0-1160master:192.168.68.106node01:192.168.68.107node02:192.168.68.108转载请在文章开头附上......
  • k8s基础
    k8s基础Kubernetes(通常称为K8s)是一个开源的容器编排和管理平台,它的主要目标是简化和自动化容器化应用程序的部署、扩展、维护和运维。以下是对Kubernetes的简单理解:容器编排:Kubernetes帮助您有效地管理和编排容器,确保它们在集群中的部署和运行。容器是轻量级的应用程序包装,包......
  • k8s pod的共享资源有哪些?
    概述1)PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID;2)网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围;3)IPC命名空间:Pod中的多个容器能够使用SystemVIPC或POSIX消息队列进行通信;4)UTS命名空间:Pod中的多个容器共享一个主机名;5)Volumes(共享存储卷):Pod......
  • k8s中是如何计算pod的计算资源(cpu和内存)的requests和limits值的?
    1、结论 对于pod来说,cpu和内存的requests和limits的值,等于pod中所有容器的requests和limits的值的总和。 具体来说:pod的requests的大小,等于所有的容器的requests的大小的和,如果某个容器没有设置requests,则这个值是0.pod的limits的值的大小,等于所有容器的limits的值的大......
  • 部署 Istio Egress Gateway
    检查IstioEgressGateway是否已布署kubectlgetpod-listio=egressgateway-nistio-system查看现存Istiopod信息kubectlgetpods-nistio-systemNAMEREADYSTATUSRESTARTSAGEistio-ingressgateway-f9fc6b7fb-m4vm......
  • k8s deploy资源更新与检查
    在k8s的资源对象中deployment类型的资源对象几乎是我们在集群运维中打交道最多的了,手动修改的话很方便命令也简单。但是如果想把这些操作放到脚本中形成自动化的过程就得想其他的方法了。下面介绍两个命令,直接在命令行修改deployment的镜像#kubectlsetimagedeploymentngin......