【发布时间】:2019-06-06 02:36:13
【问题描述】:
我正在尝试让这个 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 找到","状态":"内部服务器错误"}
为了排除故障,我已经简化了场景,我只是希望能够通过 micro api 调用 go-micro api 服务。以下是我的设置:
micro api调用greeter-web成功,但是greeter-web调用greeter-srv错误。
错误信息
{ "id": "go.micro.client", “代码”:500, "detail": "选择欢迎节点时出错:未找到", “状态”:“内部服务器错误”}
我的 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)
}
}
greeter-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)
}
}
greeter-srv 服务
apiVersion: v1
kind: Service
metadata:
name: greeter
namespace: micro
labels:
app: greeter
spec:
ports:
- port: 8080
protocol: TCP
selector:
name: greeter-srv
greater-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
【问题讨论】:
-
请提供有关您的部署的更多详细信息:kubectl get pods,svc,ep。为什么要使用外部 IP?
-
更新:
kubectl get pods,svc,ep --all-namespaces, kubectl logs <your greeter pods> -n micro -
@Hanx 请看下面
-
请同时提供以下部署:svc/greeter-web、svc、/micro-web(调用 external-ip 究竟是什么意思?
-
你好西瓜兄弟github你的状态是什么@票已关闭
标签: kubernetes go-micro