Go Grpc部署到 k8s【负载均衡】

本文介绍了如何将Go语言实现的gRPC服务部署到Kubernetes集群,并实现负载均衡。通过调整服务配置,如clusterIP、Ingress及Istio,观察不同场景下的连接行为。同时,文章提供了相关的Dockerfile、部署脚本和配置文件示例。
摘要由CSDN通过智能技术生成

网上关于grpc在k8s上的负载均衡很多,我这里就不在重复了,直接看代码吧: 我的grpc客户端和服务段都是用beego实现的,【我这里比较偷懒,直接把源码放到 k8s的一个master上】,首先需要说明以下我的k8s版本

Server:

协议在protos\hello.proto如下:

syntax = "proto3";
option go_package = "./;proto";  
package protos;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) ;
}
 
message HelloRequest {
  string name = 1;
}
 
message HelloReply {
  string message = 1;
}

然后到路径下 执行 protoc --go_out=plugins=grpc:./ ./hello.proto

服务端我为了省事直接在main.go文件添加方法:

package main

import (
	"context"
	"fmt"
	pb "grpcdemo/protos"
	"net"

	"github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/middleware/logger"
	"github.com/kataras/iris/v12/middleware/recover"
	"google.golang.org/grpc"
	"google.golang.org/grpc/reflection"
)

func main() {

	GPRCServer()

	// http
	app := iris.New()
	app.Use(recover.New())
	app.Use(logger.New())

	app.Handle("GET", "/", func(ctx iris.Context) {
		ctx.WriteString("pong")
	})
	app.Run(iris.Addr(":8080"))
}

func GPRCServer() {
	// 监听本地端口
	listener, err := net.Listen("tcp", ":9090")
	if err != nil {
		return
	}
	s := grpc.NewServer()                  // 创建GRPC
	pb.RegisterGreeterServer(s, &server{}) // 在GRPC服务端注册服务

	reflection.Register(s)
	fmt.Println("grpc serve 9090")
	err = s.Serve(listener)
	if err != nil {
		fmt.Println(fmt.Sprintf("failed to serve: %v", err))
	}

}

type server struct{}

func NewServer() *server {
	return &server{}
}

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
	msg := "Resuest By:" + in.Name + " Response By :" + LocalIp()
	fmt.Println("GRPC Send: ", msg)
	return &pb.HelloReply{Message: msg}, nil
}

func LocalIp() string {
	addrs, _ := net.InterfaceAddrs()
	var ip string = "localhost"
	for _, address := range addrs {
		if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
			if ipnet.IP.To4() != nil {
				ip = ipnet.IP.String()
			}
		}
	}
	return ip
}

服务的其他几个文件如下:Dockerfile

FROM golang:1.15.6

RUN mkdir -p /app
RUN mkdir -p /app/conf
RUN mkdir -p /app/logs

WORKDIR /app
 
ADD main /app/main

EXPOSE 8080
EXPOSE 9090
 
CMD ["./main"]

build.sh

#!/bin/bash
#cd $WORKSPACE
export GOPROXY=https://goproxy.io
 
 #根据 go.mod 文件来处理依赖关系。
go mod tidy
 
# linux环境编译
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main
 
# 构建docker镜像,项目中需要在当前目录下有dockerfile,否则构建失败

docker build -t grpcserver .
docker tag  grpcserver 192.168.100.30:8080/go/grpcserver:2021

docker login -u admin -p '123456' 192.168.100.30:8080
docker push 192.168.100.30:8080/go/grpcserver
 
docker rmi  grpcserver
docker rmi 192.168.100.30:8080/go/grpcserver:2021

deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: go
  labels:
    name: grpcserver
spec:
  replicas: 3
  minReadySeconds: 10 
  selector:
    matchLabels:
      name: grpcserver
  template:
    metadata:
      labels:
        na
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值