上文《云原生service mesh微服务开发系列(四)普通方式部署Grpc项目》我们演示了使用普通的方式部署这里的grpc项目,本文的话,我们使用istio的方式来部署grpc项目。
1)首先把之前的grpc-demo名称空间的工作负载清空
在上文我们在名称空间为grpc-demo的名称空间下部署了grpc-server和grpc-client。这里我们需要把之前部署的工作负载给删除掉,准备重新部署。当然也可以重新创建一个新的名称空间。但是我们这里演示服务器配置有限,所以这里我们还是沿用grpc-demo这个名称空间。清空之后如下图:
2)给名称空间为grpc-demo打上istio的标签。
这里给名称空间打赏istio的标签之后,那么后续在这个grpc上部署的服务将自动被注入上istio的sidecar。这里我们演示一下。直接进入命令行,使用如下的命令打标签:
kubectl label namespace grpc-demo istio-injection=enabled
这里打标签的语法是:
kubectl label namespace ${名称空间} istio-injection=enabled
打完之后如下图:
备注:
1、这里我们查看某个示例部分的标签命令格式如下: kubectl get ${namespace/pod/svc} --show-labels
3)部署grpc-server项目
此时我们还是使用kuboard来部署这里的grpc-server项目。只需要填写基本信息和容器信息即可,暂时不填写路由信息。
基本信息示例如下:
容器信息示例图如下:
然后我们点击保存,就可以看到grpc-server的服务启动起来了:
我们把这个页面往下拖,可以看到grpc-server自动被注入了istio,如下图:
4)为grpc-server创建一个service
接着我们还是在kuboard上为grpc-server这个pod创建一个service,示例图如下:
记得一定要添加这个标签选择器。
5)部署grpc-client
这里我们仍然使用kuboard部署grpc-client,也只填写基本信息和容器信息。
基本信息示例图如下:
容器信息示例图如下:
接着保存一下,然后可以看到client的pod也启动起来了,并且自动被注入了istio的sidecar,示例图如下:
6)为client创建service
接着我们继续为client创建一个service,示例图如下:
备注:
1、切记一定要添加标签选择器
7)测试访问
这里可以看到我们client和server两个项目的service都是使用ClusterIP的形式,所以这里我们测试下是否能访问通,我们进入到服务器,使用curl进行测试:
可以看到能正确返回信息,说明部署是没问题的。
备注:
1、这里的10.233.43.74的ip是client的service这个ip,如下图:
以上为止,我们基础的pod就部署完了,但是这里的访问却是没用通过istio的网格,因为要进行访问的话,那肯定是需要通过istio-ingress进行访问。所以我们需要接着来配置istio的网格。
8)添加gateway
还记得我们在安装istio的时候,安装了gateway吗?当时在istio-system这个名称空间里面部署了这个gateway的组件,示例图如下:
我们点击进去看看这个istio-ingressgateway组件的标签(因为我们后面需要创建ingress,需要选择这个标签):
我们可以看到在这个istio-ingressgateway组件里面,有一个标签名称为:
istio=ingressgateway
我们进入服务器,创建一个名称为:ingress_gateway.yaml的文件,然后把下面的内容粘贴进去:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: grpc-gateway namespace: grpc-demo spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "*"
这里的文件主要内容是:
1、创建的gateway指定名称空间为:grpc-demo,方便后面做service发现。 2、给当前的gateway创建一个名称为:grpc-gateway 3、使用标签选择器选择安装的istio的ingressgateway 4、这里由于是http端口,所以我们默认是80即可。
然后使用如下的命令进行创建:
kubectl apply -f ingress_gateway.yaml
执行完毕之后,我们使用如下的命令即可查看创建的gayeway:
kubectl get gw -A
示例图如下:
备注:
这里创建的gateway其实就相当于是配置了一个nginx_conf的作用。
9)创建VirtualService
创建完了gateway之后,我们还需要创建这个VirtualService,它主要用来连接gateway和我们的client的service的。我们继续在服务器上创建一个名称为:client.yaml的配置文件,并且把如下的内容复制进去:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: grpc-demo namespace: grpc-demo spec: hosts: - "*" gateways: - grpc-gateway http: - match: - uri: exact: /getUser route: - destination: host: client port: number: 8088
这里同样的创建成功了之后,使用如下的命令查看创建的VirtualService
kubectl get vs -A
结果如下图:
备注:
1、前面的gateway相当于是nginx的listen配置 2、这里的VirtualService相当于location的规则配置 3、这里的gateway一定要选择对 4、http.match配置能访问的url,可以配置多个url,使用yml文件格式的list方式进行展示 5、route.destination配置要访问的service,这个service目前我们指定的是grpc-client,刚才创建的service名称为client,如下图:
10)测试
到此为止,我们已经配置号了gateway了,整个的访问流程如下:
所以我们访问还是istio创建的ingressgateway组件,使用如下的命令查看:
kubectl get svc -n istio-system
结果图如下:
此时可以看到我们这个istio-ingressgateway暴露的端口是:31067,30828,32468,对应的自定义gateway端口是:15021,80,443。由于我们刚才自定义的gateway是80端口,所以我们需要访问宿主机的30828端口,下面我们测试看看:
可以看到成功的访问到了服务信息。
以上就是使用istio部署服务网格的案例。
还没有评论,来说两句吧...