黑马程序员技术交流社区

标题: 【上海校区】Service Mesh - gRPC 本地联调远程服务 [打印本页]

作者: 梦缠绕的时候    时间: 2020-3-10 09:29
标题: 【上海校区】Service Mesh - gRPC 本地联调远程服务
Description
Service Mesh 架构下,服务间调用会通过服务名(Service Name)互相调用,比如在 Kubernetes 、Docker Swarm 集群中,服务 IP 均由集群动态分配,外部网络无法直接访问到集群内部的服务。对于大型系统,微服务的数量较多,服务间的调用关系也错综复杂,遇到问题时,本地启动整个服务集群去 Debug,不仅需要本地电脑有很高的配置,而且操作起来也比较麻烦。比较优雅一点的做法是本地启动相应服务,gRPC 调用都连接到远程集群。
Nginx gRPC Module
Nginx 版本 1.13.10 之后支持 gRPC 反向代理,这样我们就能通过在集群中部署 Nginx 服务,来连通外部网络和集群内的服务。
Kubernetes Demo
1、Deploy gRPC Server In Kubernetes Cluster
kind: ServiceapiVersion: v1metadata:  name: server-a-service  namespace: defaultspec:  ports:    - port: 6565      targetPort: 6565  selector:    app: server-a
2、Deploy Nginx gRPC Proxy In Kubernetes Cluster
以下内容包含 Nginx Config、Nginx Deployment 和 Nginx Service,提供了 gRPC 请求的转发能力:
apiVersion: v1kind: ConfigMapmetadata:  name: nginx-grpc-proxy-config  namespace: defaultdata:  grpc.conf: |    server {        listen 6565 http2;        server_name server-a-service;        location / {            grpc_pass grpc://server-a-service.default:6565;        }    }---apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-grpc-proxy-deployment  namespace: defaultspec:  replicas: 1  selector:    matchLabels:      app: nginx-grpc-proxy  template:    metadata:      labels:        app: nginx-grpc-proxy    spec:      containers:        - name: nginx-grpc-proxy          image: nginx:1.17          ports:            - containerPort: 6565          volumeMounts:            - mountPath: /etc/nginx/conf.d/              name: nginx-config      volumes:        - name: nginx-config          configMap:            name: nginx-grpc-proxy-config---kind: ServiceapiVersion: v1metadata:  name: nginx-grpc-proxy-service  namespace: defaultspec:  ports:    - port: 6565      targetPort: 6565      nodePort: 30000  selector:    app: nginx-grpc-proxy  type: NodePort
3、Test Local Client Connect Remote Server
servers = [Server('test', '127.0.0.1', 6565)]# 变更为servers = [Server('test', 'server-a-service', 30000)]Questions
多个远程 gRPC 服务如何配置 nginx?
nginx 配置文件中添加多个 server 记录:
    server {        listen 6565 http2;        server_name server-a-service;        location / {            grpc_pass grpc://server-a-service.default:6565;        }    }    server {        listen 6565 http2;        server_name server-b-service;        location / {            grpc_pass grpc://server-b-service.default:6565;        }    }
本地 host 需要添加相应的记录:
<k8s 公网 IP> server-a-service<k8s 公网 IP> server-b-service

作者: 梦缠绕的时候    时间: 2020-3-10 09:30
有问题联系小优:DKA-2018




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2