Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tke上nginx-ingress实现grpc转发

tke上nginx-ingress实现grpc转发

原创
作者头像
聂伟星
修改于 2022-04-01 09:35:19
修改于 2022-04-01 09:35:19
2K30
代码可运行
举报
运行总次数:0
代码可运行

gRPC是Google开源的一个高性能RPC通信框架,通过Protocol Buffers作为其IDL,可以在不同语言开发的平台上使用,同时基于HTTP/2协议实现,继而提供了连接多路复用、头部压缩、流控等特性,极大地提高了客户端与服务端的通信效率。

在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型。在服务端,服务端实现这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端,客户端有一个存根(在某些语言中仅称为客户端),它提供与服务器相同的方法。

下面我们在演示下在tke上部署一个grpc的demo,然后通过nginx-ingress来实现对grpc服务的转发。注意下面的所有资源都部署在weixnie这个命名空间下,如果需要部署到自己的命名空间,需要修改下yaml。

1. 部署grpc-server

可以参考yaml部署下grpc-server

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: grpc-service
    qcloud-app: grpc-service
  name: grpc-service
  namespace: weixnie
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: grpc-service
      qcloud-app: grpc-service
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        k8s-app: grpc-service
        qcloud-app: grpc-service
    spec:
      containers:
      - image: ccr.ccs.tencentyun.com/niewx-k8s/grpc:latest
        imagePullPolicy: Always
        name: grpc-service
        resources:
          limits:
            cpu: 500m
            memory: 1Gi
          requests:
            cpu: 250m
            memory: 256Mi
        securityContext:
          privileged: false
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: qcloudregistrykey
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}

2. 配置ingress转发grpc服务

Ingress Nginx暴露gRPC服务的时候,暂时只支持TLS(HTTPS)的方式,而不能通过普通HTTP方式,所以我们要配置TLS secret。

这里获取证书的方式有2种,一种可以用命令生成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=grpc.example.com/O=grpc.example.com"

还有一种就是去腾讯云上申请一年有效的证书

证书生成好之后,我们用secret配置下证书

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl create secret tls grpc-secret  --cert tls.crt --key tls.key -n weixnie

然后创建下ingress

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx-intranet
    nginx.ingress.kubernetes.io/backend-protocol: GRPC
  name: grpc-ingress
  namespace: weixnie
spec:
  rules:
  - host: grpc.example.com
    http:
      paths:
      - backend:
          serviceName: grpc-service
          servicePort: 50051
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - grpc.example.com
    secretName: grpc-secret

注意ingress.class配置成自己的class名称,nginx-ingress实现grpc转发,必须要配置上这个注解nginx.ingress.kubernetes.io/backend-protocol:GRPC

3. 测试grpc服务访问

创建好ingress后,我们来用grpcurl来测试访问下,如果你本地没有grpcurl这个工具,可以通过下面yaml起一个grpcurl工具pod,然后在容器里用grpcurl 去测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: grpcurl
    qcloud-app: grpcurl
  name: grpcurl
  namespace: weixnie
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: grpcurl
      qcloud-app: grpcurl
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: grpcurl
        qcloud-app: grpcurl
    spec:
      containers:
      - args:
        - 70d
        command:
        - sleep
        image: ccr.ccs.tencentyun.com/niewx-k8s/grpcurl:latest
        imagePullPolicy: Always
        name: grpcurl
        resources: {}
        securityContext:
          privileged: false
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      hostAliases:
      - hostnames:
        - grpc.example.com
        ip: 172.16.0.14
      imagePullSecrets:
      - name: qcloudregistrykey
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

因为grpc.example.com这个域名没有配置解析,所以需要在容器里面配置下host,将域名解析到nginx-ingress控制器入口serivce的ip上。

pod起来后,我们直接到容器测试下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看gRPC服务端提供的所有服务:
# grpcurl -insecure grpc.example.com:443 list


# 查看helloworld.Greeter服务的接口方法
# grpcurl -insecure grpc.example.com:443 list helloworld.Greeter

# 描述SayHello方法的具体协议参数
# grpcurl -insecure grpc.example.com:443 describe helloworld.Greeter.SayHello

# 调用SayHello方法并传递name参数
# grpcurl -insecure -d '{"name": "gRPC"}' grpc.example.com:443 helloworld.Greeter.SayHello

# grpcurl -insecure -d '{"name": "world"}' grpc.example.com:443 helloworld.Greeter.SayHello

这里测试调用成功

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
3 条评论
热度
最新
感谢分享
感谢分享
回复回复点赞举报
学到了
学到了
回复回复点赞举报
支持一下 看看~~
支持一下 看看~~
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
腾讯云TKE-Ingress案例: Nginx-Ingress 实现grpc转发
gRPC是Google开源的一个高性能RPC通信框架,通过Protocol Buffers作为其IDL,可以在不同语言开发的平台上使用,同时基于HTTP/2协议实现,继而提供了连接多路复用、头部压缩、流控等特性,极大地提高了客户端与服务端的通信效率。
朱瑞卿
2020/10/26
3.1K0
腾讯云TKE-Ingress案例: Nginx-Ingress 实现grpc转发
tke中如何通过clb类型ingress转发集群内和集群外服务
最近接到很多用户在将服务迁移到tke的时候遇到一个问题,那就是我的服务以前是部署在集群外的cvm上,但是现在我将一部分迁移到了tke,现在我需要用一个同一个的入口来提供访问。
聂伟星
2022/03/18
1.3K0
TKE之Traefik最佳实践
k8s的接入层有很多种,常见的7层负载均衡有nginx-ingress、traefik、kong等,还有每个云厂商为了对接自己的负载均衡产品所开发的控制器,tke集群现在默认是clb类型ingress,也支持组件安装nginx-ingress到集群内使用,其他类型的网关,需要自己在集群内部署才行,今天我们讲讲traefik在tke上的部署安装和一些使用实践。
聂伟星
2022/03/18
2.4K0
云原生监控数据查询地址如何暴露出公网
prometheus现在是主流的监控k8s方案,各大云厂商也都有托管的k8s服务,为了更好的对托管k8s集群监控,也推出了托管的prometheus监控服务,腾讯云上就推出了腾讯云云原生监控服务(Tencent Prometheus Service,TPS)下面简称TPS,TPS
聂伟星
2021/08/31
1.9K1
从无到有基于腾讯云TKE部署Kubernetes全流程(三)
只能实现一对一挂载,因为硬盘只支持一次挂载,通过硬盘创建的PVC为RWO,单机读写。
蒋经纬
2020/06/24
8830
linux skywalking k8s部署
调用链监控告警神器: git:https://github.com/apache/skywalking 实践: oap-server  deployment: apiVersion: apps/v1beta2 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "14" description: skywalking-oap-server creationTimestamp: "2020
葫芦
2020/04/22
2.6K0
安装nginx-ingress(上)
An API object that manages external access to the services in a cluster, typically HTTP.
虚心学习
2020/01/15
3.2K0
Kubernetes 的hostPort 与 hostNetwork使用
访问测试 如下,通过PODIP+containerPort 和 node节点IP+hostPort 都可以正常访问到
chen1900s
2022/05/20
8.7K0
通过nginx-ingress做tcp\udp 4层网络转发
k8s集群通过nginx-ingress做tcp\udp 4层网络转发 集群是TKE集群
chen1900s
2023/10/06
2.9K0
二进制安装k8s集群(16)-安装nginx-ingress-controller
在上一篇文章里我们主要介绍安装k8s集群内的基础服务kube-dashboard,这里我们继续介绍安装k8s集群内基础服务nginx-ingress,这个基础服务也创建在kube-system namesapce里,是以deployment的方式运行。当然 daemonset也是可以的,这里没有硬性要求。image镜像从我们的private repo pull(以前文章里介绍过harbor private repo的创建,以及镜像的push和pull)。当然原始image来源于官方的quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1,不过要下载它需要科学上网或者搭个梯子。另外对于ingress方案,一般有nginx-ingress,traefik ingress(traefik2.0也已经问世了,都是可以选择的),haproxy ingress等,实际情况用哪种请根据团队和实际的需求来选择。
TA码字
2020/04/01
1.3K0
二进制安装k8s集群(16)-安装nginx-ingress-controller
gRPC,爆赞
gRPC 这项技术真是太棒了,接口约束严格,性能还高,在 k8s 和很多微服务框架中都有应用。
AlwaysBeta
2021/10/12
1.2K0
TKE/EKS集群通过logrotate切割nginx-ingress访问日志
Nginx-ingress 是使用 Nginx 作为反向代理和负载平衡器的 Kubernetes 的 Ingress 控制器,容器服务 TKE 提供了产品化的能力,可以直接在集群内安装和使用 Nginx-ingress,具体可以参考文档https://cloud.tencent.com/document/product/457/50503
聂伟星
2022/12/15
2K1
TKE使用自带nginx-ingress组件实现tcp/udp转发
在TKE内将服务直接通过端口暴露到外网,可以使用CLB类型service,或者nginx-ingress方式实现,最近处理问题时遇到用户需要将ingress跟service同时使用nginx-ingress方式暴露,不想额外使用CLB,这里就涉及到通过nginx-ingress组件暴露四层TCP/udp的问题
程哲
2022/03/06
2.1K0
Traefik1.7.17的部署使用
因为我这里是作为kubernetes服务的暴露,因此你得有一个kubernetes集群
聂伟星
2020/07/12
1.3K0
腾讯云TKE-Ingress案例: TKE-Ingress与Nginx-Ingress共存
用户场景: 既想使用腾讯云TKE Ingress的能力又想使用Nginx-Ingress的能力, 多个入口,不同的controller监听不同的带有kubernetes.io/ingress.class annotations 标签的资源. 架构图如下:
朱瑞卿
2020/10/24
2.1K0
腾讯云TKE-Ingress案例: TKE-Ingress与Nginx-Ingress共存
Nginx-Ingress详解
k8s 中所有的资源都有对应的控制器在操控这个资源,管理资源的生命周期,实现”声明式“效果。Deployment、Service、Replicaset等资源的控制器封装在k8s内置的 controller-manager进程中。
kinnylee
2021/12/30
6.8K1
Nginx-ingress controller部署
使用Nginx-ingress服务的前提是在集群内部署nginx-ingress controller,controller部署的nginx-install.yaml如下: apiVersion: v1 kind: Namespace metadata: name: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx --- kin
院长技术
2022/03/10
3K0
nginx-ingress使用(下)
上文已对nginx-ingress进行相关组件安装部署,可以根据实际需求进行定义Ingress资源来实现七层负载转发了。
虚心学习
2020/01/15
1.3K0
如何将TKE/EKS集群事件日志持久化
腾讯云上的tke集群和eks集群的事件日志默认只会保留一个小时,有的时候,服务出现了问题,需要根据历史事件日志来进行排查下,因为历史事件日志只有1个小时,这样给我们排查带来了极大不便。腾讯云上默认是支持将集群的事件日志采集到cls,但是cls是需要收费的,而且很多人习惯用Elasticsearch来查询日志。 下面我们通过开源的eventrouter来将日志采集到Elasticsearch,然后通过kibana来查询事件日志。 eventrouter介绍说明:https://github.com/heptiolabs/eventrouter
聂伟星
2022/04/30
1.3K9
kubernetes系列教程(十六)基于nginx ingress实现服务暴露
本章介绍kubernetes系列教程的ingress概念,在kubernetes中对外暴露服务的方式有两种:service(NodePort或者外部LoadBalancer)和ingress,其中service是提供四层的负载均衡,通过iptables DNAT或lvs nat模式实现后端Pod的代理请求。如需实现http,域名,URI,证书等请求方式,service是无法实现的,需要借助于ingress来来实现,本文将来介绍ingress相关的内容。
HappyLau谈云计算
2020/01/01
41.3K0
kubernetes系列教程(十六)基于nginx ingress实现服务暴露
相关推荐
腾讯云TKE-Ingress案例: Nginx-Ingress 实现grpc转发
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验