Skip to content

Instantly share code, notes, and snippets.

@nicewook
Last active May 27, 2022 08:38
Show Gist options
  • Save nicewook/8cadc2ae916995667c4827579baa66b3 to your computer and use it in GitHub Desktop.
Save nicewook/8cadc2ae916995667c4827579baa66b3 to your computer and use it in GitHub Desktop.

K8s 클러스터로 gRPC 호출을 하는데 연결이 실패하는 문제

예제를 테스트중인데 막혀서 이렇게 질문드려 봅니다. 예제는 간단합니다. kind로 k8s 클러스터를 만들고 helm으로 docker image를 실행시킨 다음 gRPC 클라이언트로 요청하나를 보내는 것입니다.

현재상황

실습 순서

  1. 도커 데스크탑 실행

  2. $ kind create cluster로 클러스터 생성

  3. $ make init gencert compile build-docker 로 도커 이미지 생성

  4. $ make init load-docker로 도커를 kind에 로드

  5. $ helm install proglog deploy/proglog 로 클러스터로 배포

  6. $ kubectl get pods 로 proglog-0, 1, 2 모두 running하는 걸 확인한 다음

  7. $ kubectl port-forward pod/proglog-0 8400 으로 포트 포워딩. 클러스터의 proglog-0 pod의 :8400 포트로 전달된다.

  8. 아래 코드를 cmd/getservers/main.go 파일을 생성하여 넣고 실행 $ go run cmd/getservers/main.go

package main

import (
	"context"
	"flag"
	"fmt"
	"log"

	api "github.com/varunbpatil/proglog/api/v1"
	"google.golang.org/grpc"
)

func main() {
	addr := flag.String("addr", ":8400", "service address")
	flag.Parse()
	conn, err := grpc.Dial(*addr, grpc.WithInsecure())
	if err != nil {
		log.Fatal(err)
	}
	client := api.NewLogClient(conn)
	ctx := context.Background()
	res, err := client.GetServers(ctx, &api.GetServersRequest{})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("servers:")
	for _, server := range res.Servers {
		fmt.Printf("\t- %v\n", server)
	}

현재 상황

코드를 따락가보니 클러스터로 배포되는 녀석은 TLS 보안을 쓰지 않는 녀석이었고, 따라서 위의 getservers/main.go 파일로 연결이 되어야 하는데 연결이 실패하고 port-forwarding도 끊겨버립니다. helm으로 간단한 nginx를 배포하고 포트포워딩 해보았을때에 문제없이 되는 것을 포면 포트포워딩 자체는 또 문제가 아닌것 같구요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment