Я пытаюсь, чтобы этот пример go-micro greeter работал на Kubernetes https://github.com/micro/examples/tree/master/greeter
Я могу запустить это локально в Docker.Однако, когда я пытаюсь получить доступ к службе API greeter через Kubernetes (http://{{external-ip}}/greeter/say/hello
), я получаю сообщение об ошибке:
{"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 error.
сообщение об ошибке
{"id": "go.micro.client", "code": 500, "detail": "ошибка при выборе узла приветствия: не найдено", "status": "Внутренняя ошибка сервера"}
my yamlздесь:
greeter-web
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 service
apiVersion: v1
kind: Service
metadata:
name: greeter
namespace: micro
labels:
app: greeter
spec:
ports:
- port: 8080
protocol: TCP
selector:
name: greeter-srv
больше-srv pod
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