Go Grpc部署到 k8s【端口共享】

本文档探讨了在Kubernetes (K8s) 中部署Go gRPC服务时遇到的端口共享问题,特别是当与HTTP服务在同一端口上运行时。通过Istio进行负载均衡和端口配置尝试解决这个问题,但发现使用特定端口名称会导致健康检查失败。作者分享了错误记录和配置文件,指出端口名称不应以http、http2或grpc开头,同时展示了即使更改端口名称也无法成功实现gRPC和HTTP共存的情况。
摘要由CSDN通过智能技术生成

书接上文Go Grpc部署到 k8s【负载均衡】 grpc server端我们暴露了9090和8080端口,这次我们的http服务用iris,并且绑定到9090端口。

GO文件

服务端代码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"
	"github.com/soheilhy/cmux"
	"google.golang.org/grpc"
)

func main() {
	l, err := net.Listen("tcp", ":9090")
	fmt.Println(err)
	m := cmux.New(l)

	// grpc
	grpcL := m.MatchWithWriters(cmux.HTTP2MatchHeaderFieldSendSettings("content-type", "application/grpc"))
	grpcServer := grpc.NewServer()                  // 创建GRPC
	pb.RegisterGreeterServer(grpcServer, &server{}) // 在GRPC服务端注册服务

	go grpcServer.Serve(grpcL)

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

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

	go func() {
		httpL := m.Match(cmux.HTTP1Fast())
		app.Run(iris.Listener(httpL))
	}()

	// Start serving!
	m.Serve()
}

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
}

服务端代码deploy.yaml:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值