我正在尝试让这个 go-micro greeter 示例在 Kubernetes 上运行https://github.com/micro/examples/tree/master/greeter
我可以在 docker 本地运行它。但是,当我尝试通过 Kubernetes ( http://{{external-ip}}/greeter/say/hello
) 访问 greeter api 服务时,我收到错误消息:
{"id":"go.micro.api","code":500,"detail":"not found","status":"Internal Server Error"}
为了排除故障,我简化了场景,我只是希望能够通过 micro api 调用 go-micro api 服务。以下是我的设置:
micro api调用greeter-web成功,但是greeter-web调用greeter-srv错误。
错误信息
{“id”:“go.micro.client”,“code”:500,“detail”:“选择欢迎节点时出错:未找到”,“status”:“内部服务器错误”}
我的 yaml 在这里:
迎宾网
package main
import (
"fmt"
"log"
"net/http"
hello "github.com/micro/examples/greeter/srv/proto/hello"
"github.com/micro/go-micro/client"
"github.com/micro/go-web"
k8s "github.com/micro/kubernetes/go/web"
"context"
)
func main() {
service := k8s.NewService(
web.Name("go.micro.web.greeter"),
)
service.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
r.ParseForm()
name := r.Form.Get("name")
if len(name) == 0 {
name = "World"
}
cl := hello.NewSayService("greeter", client.DefaultClient)
rsp, err := cl.Hello(context.Background(), &hello.Request{
Name: name,
})
if err != nil {
http.Error(w, err.Error(), 500)
return
}
w.Write([]byte(`<html><body><h1>` + rsp.Msg + `</h1></body></html>`))
return
}
fmt.Fprint(w, `<html><body><h1>Enter Name<h1><form method=post><input name=name type=text /></form></body></html>`)
})
if err := service.Init(); err != nil {
log.Fatal(err)
}
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
迎接者-srv
package main
import (
"log"
"time"
hello "github.com/micro/examples/greeter/srv/proto/hello"
"github.com/micro/go-micro"
k8s "github.com/micro/kubernetes/go/micro"
"context"
)
type Say struct{}
func (s *Say) Hello(ctx context.Context, req *hello.Request, rsp *hello.Response) error {
log.Print("Received Say.Hello request")
rsp.Msg = "Hello " + req.Name
return nil
}
func main() {
service := k8s.NewService(
micro.Name("greeter"),
micro.RegisterTTL(time.Second*30),
micro.RegisterInterval(time.Second*10),
)
// optionally setup command line usage
service.Init()
// Register Handlers
hello.RegisterSayHandler(service.Server(), new(Say))
// Run server
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
迎宾服务
apiVersion: v1
kind: Service
metadata:
name: greeter
namespace: micro
labels:
app: greeter
spec:
ports:
- port: 8080
protocol: TCP
selector:
name: greeter-srv
更大的 srv 吊舱
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: micro
name: greeter
spec:
replicas: 1
selector:
matchLabels:
name: greeter-srv
template:
metadata:
labels:
name: greeter-srv
spec:
containers:
- name: greeter
command: [
"/greeter-srv",
"--selector=static",
"--server_address=0.0.0.0:8080",
"--broker_address=0.0.0.0:10001"
]
image: harbor.my.work.com/micro-test/greeter-srv:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
name: greeter-port
- name: health
command: [
"/health",
"--health_address=0.0.0.0:8081",
"--server_name=greeter",
"--server_address=0.0.0.0:8080"
]
image: harbor.my.work.com/micro-test/health:latest
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /health
port: 8081
initialDelaySeconds: 3
periodSeconds: 3