doujue1246 2018-04-20 07:36
浏览 275

Go-micro kubernetes greeter示例-无法访问greeter API服务

I'm trying to get this go-micro greeter example working on Kubernetes https://github.com/micro/examples/tree/master/greeter

I can run this locally in docker fine. However when I attempt to access the greeter api service via Kubernetes (http://{{external-ip}}/greeter/say/hello), I get the error: {"id":"go.micro.api","code":500,"detail":"not found","status":"Internal Server Error"}

For the sake of troubleshooting I've simplified the scenario, I simply want to be able to make a call via the micro api to a go-micro api service. Below is my setup:

api.go

package main

import (
    "github.com/micro/go-micro"
    api "github.com/micro/micro/api/proto"
    "log"
    k8s "github.com/micro/kubernetes/go/micro"

    "context"
)

type Say struct {
}

//I just want to access this via the micro api on k8s via services external ip
func (s *Say) Hello(ctx context.Context, req *api.Request, rsp *api.Response) error {
    rsp.StatusCode = 200
    rsp.Body = "Hello"
    return nil
}

func main() {
    service := k8s.NewService(
        micro.Name("default.greeter-api"),
    )

    service.Init()

    service.Server().Handle(
        service.Server().NewHandler(
            &Say{},
        ),
    )

    if err := service.Run(); err != nil {
        log.Fatal(err)
    }
}

micro-api-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: micro
spec:
  replicas: 1
  selector:
    matchLabels:
      app: micro
  template:
    metadata:
      labels:
        app: micro
    spec:
        containers:
        - name: micro
          image: microhq/micro:kubernetes
          args:
            - "api"
            - "--handler=rpc"
            - "--namespace=default"
          env:
          - name: MICRO_API_ADDRESS
            value: ":80"
          ports:
          - containerPort: 80
            name: api-port

micro-api-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: micro
spec:
  type: LoadBalancer
  ports:
  - name: api-http
    port: 80
    targetPort: "api-port"
    protocol: TCP
  selector:
    app: micro

greet-deployment.yml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: greeter-api
spec:
  replicas: 1
  selector:
    matchLabels:
      app: greeter-api
  template:
    metadata:
      labels:
        app: greeter-api
    spec:
        containers:
        - name: greeter-api-service
          image: greeter-api:latest
          imagePullPolicy: Always
          command: [
            "./greet",
            "--selector=static",
            "--server_address=:8080",
          ]
          ports:
          - containerPort: 8080
            name: greet-port

greet-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: greet
  labels:
    app: greet
spec:
  ports:
  - port: 8080
    protocol: TCP
  selector:
    app: greet
  • 写回答

1条回答 默认 最新

  • dr637349 2018-04-20 15:50
    关注

    Everything is fine with your configs.

    http://{{external-ip}}/greeter/say/hello), I get the error: {"id":"go.micro.api","code":500,"detail":"not found","status":"Internal Server Error"}

    You missed just the port number 8080 in your request and tried to call rpc service instead of greeter-api .

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)