grpc - replaced fortune-builder app with official greeter app (#7360)
This commit is contained in:
parent
9e274dd41c
commit
91a4bba026
18 changed files with 220 additions and 617 deletions
55
images/go-grpc-greeter-server/Makefile
Normal file
55
images/go-grpc-greeter-server/Makefile
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# Copyright 2021 The Kubernetes Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# set default shell
|
||||
SHELL=/bin/bash -o pipefail -o errexit
|
||||
|
||||
DIR:=$(strip $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))))
|
||||
INIT_BUILDX=$(DIR)/../../hack/init-buildx.sh
|
||||
|
||||
TAG ?=v$(shell date +%m%d%Y)-$(shell git rev-parse --short HEAD)
|
||||
REGISTRY ?= local
|
||||
|
||||
IMAGE = $(REGISTRY)/go-grpc-greeter-server
|
||||
|
||||
# required to enable buildx
|
||||
export DOCKER_CLI_EXPERIMENTAL=enabled
|
||||
|
||||
# build with buildx
|
||||
PLATFORMS?=linux/amd64,linux/arm,linux/arm64,linux/s390x
|
||||
OUTPUT=
|
||||
PROGRESS=plain
|
||||
|
||||
build: ensure-buildx
|
||||
docker buildx build \
|
||||
--platform=${PLATFORMS} $(OUTPUT) \
|
||||
--progress=$(PROGRESS) \
|
||||
--pull \
|
||||
-t $(IMAGE):$(TAG) rootfs
|
||||
|
||||
# push the cross built image
|
||||
push: OUTPUT=--push
|
||||
push: build
|
||||
|
||||
# enable buildx
|
||||
ensure-buildx:
|
||||
# this is required for cloudbuild
|
||||
ifeq ("$(wildcard $(INIT_BUILDX))","")
|
||||
@curl -sSL https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/hack/init-buildx.sh | bash
|
||||
else
|
||||
@exec $(INIT_BUILDX)
|
||||
endif
|
||||
@echo "done"
|
||||
|
||||
.PHONY: build push ensure-buildx
|
||||
24
images/go-grpc-greeter-server/cloudbuild.yaml
Normal file
24
images/go-grpc-greeter-server/cloudbuild.yaml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
timeout: 1200s
|
||||
options:
|
||||
substitution_option: ALLOW_LOOSE
|
||||
# job builds a multi-arch docker image for amd64,arm,arm64 and s390x.
|
||||
machineType: N1_HIGHCPU_8
|
||||
steps:
|
||||
- name: gcr.io/k8s-testimages/gcb-docker-gcloud:v20210622-762366a
|
||||
entrypoint: bash
|
||||
env:
|
||||
- DOCKER_CLI_EXPERIMENTAL=enabled
|
||||
- TAG=$_GIT_TAG
|
||||
- BASE_REF=$_PULL_BASE_REF
|
||||
- REGISTRY=gcr.io/k8s-staging-ingress-nginx
|
||||
# default cloudbuild has HOME=/builder/home and docker buildx is in /root/.docker/cli-plugins/docker-buildx
|
||||
# set the home to /root explicitly to if using docker buildx
|
||||
- HOME=/root
|
||||
args:
|
||||
- -c
|
||||
- |
|
||||
gcloud auth configure-docker \
|
||||
&& make push
|
||||
substitutions:
|
||||
_GIT_TAG: "12345"
|
||||
_PULL_BASE_REF: "master"
|
||||
16
images/go-grpc-greeter-server/rootfs/Dockerfile
Normal file
16
images/go-grpc-greeter-server/rootfs/Dockerfile
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
FROM golang:buster as build
|
||||
|
||||
WORKDIR /go/src/greeter-server
|
||||
|
||||
RUN curl -o main.go https://github.com/grpc/grpc-go/blob/91e0aeb192456225adf27966d04ada4cf8599915/examples/features/reflection/server/main.go && \
|
||||
go mod init greeter-server && \
|
||||
go mod tidy && \
|
||||
go build -o /greeter-server main.go
|
||||
|
||||
FROM gcr.io/distroless/base-debian10
|
||||
|
||||
COPY --from=build /greeter-server /
|
||||
|
||||
EXPOSE 50051
|
||||
|
||||
CMD ["/greeter-server"]
|
||||
1
images/grpc-fortune-teller/.gitignore
vendored
1
images/grpc-fortune-teller/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
|||
bazel-*
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
load("@io_bazel_rules_go//go:def.bzl", "gazelle", "go_prefix")
|
||||
|
||||
gazelle(
|
||||
name = "gazelle",
|
||||
args = [
|
||||
"-build_file_name",
|
||||
"BUILD,BUILD.bazel",
|
||||
],
|
||||
command = "fix",
|
||||
prefix = "github.com/kubernetes/ingress-nginx/images/grpc-fortune-teller",
|
||||
)
|
||||
|
||||
go_prefix(
|
||||
prefix = "github.com/kubernetes/ingress-nginx/images/grpc-fortune-teller",
|
||||
)
|
||||
104
images/grpc-fortune-teller/Gopkg.lock
generated
104
images/grpc-fortune-teller/Gopkg.lock
generated
|
|
@ -1,104 +0,0 @@
|
|||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
||||
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/golang/protobuf"
|
||||
packages = [
|
||||
"proto",
|
||||
"protoc-gen-go/descriptor",
|
||||
"ptypes",
|
||||
"ptypes/any",
|
||||
"ptypes/duration",
|
||||
"ptypes/timestamp"
|
||||
]
|
||||
revision = "925541529c1fa6821df4e44ce2723319eb2be768"
|
||||
version = "v1.0.0"
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/vromero/gofortune"
|
||||
packages = [
|
||||
"lib",
|
||||
"lib/fortune"
|
||||
]
|
||||
revision = "8a3c485287c0d3d3e4f8f0d9e0058f6cdd29740d"
|
||||
version = "v0.0.1"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
name = "golang.org/x/net"
|
||||
packages = [
|
||||
"context",
|
||||
"http2",
|
||||
"http2/hpack",
|
||||
"idna",
|
||||
"internal/timeseries",
|
||||
"lex/httplex",
|
||||
"trace"
|
||||
]
|
||||
revision = "b3c676e531a6dc479fa1b35ac961c13f5e2b4d2e"
|
||||
|
||||
[[projects]]
|
||||
name = "golang.org/x/text"
|
||||
packages = [
|
||||
"collate",
|
||||
"collate/build",
|
||||
"internal/colltab",
|
||||
"internal/gen",
|
||||
"internal/tag",
|
||||
"internal/triegen",
|
||||
"internal/ucd",
|
||||
"language",
|
||||
"secure/bidirule",
|
||||
"transform",
|
||||
"unicode/bidi",
|
||||
"unicode/cldr",
|
||||
"unicode/norm",
|
||||
"unicode/rangetable"
|
||||
]
|
||||
revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0"
|
||||
version = "v0.3.0"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
name = "google.golang.org/genproto"
|
||||
packages = ["googleapis/rpc/status"]
|
||||
revision = "35de2414665fc36f56b72d982c5af480d86de5ab"
|
||||
|
||||
[[projects]]
|
||||
name = "google.golang.org/grpc"
|
||||
packages = [
|
||||
".",
|
||||
"balancer",
|
||||
"balancer/base",
|
||||
"balancer/roundrobin",
|
||||
"codes",
|
||||
"connectivity",
|
||||
"credentials",
|
||||
"encoding",
|
||||
"encoding/proto",
|
||||
"grpclb/grpc_lb_v1/messages",
|
||||
"grpclog",
|
||||
"internal",
|
||||
"keepalive",
|
||||
"metadata",
|
||||
"naming",
|
||||
"peer",
|
||||
"reflection",
|
||||
"reflection/grpc_reflection_v1alpha",
|
||||
"resolver",
|
||||
"resolver/dns",
|
||||
"resolver/passthrough",
|
||||
"stats",
|
||||
"status",
|
||||
"tap",
|
||||
"transport"
|
||||
]
|
||||
revision = "d89cded64628466c4ab532d1f0ba5c220459ebe8"
|
||||
version = "v1.11.2"
|
||||
|
||||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
inputs-digest = "fcd36504ba120cfbbe161eac2ddd439c884fcef61ce318b5c0a544d27bc47043"
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
|
||||
# grpc-fortune-teller
|
||||
|
||||
This is the grpc server application for the nginx-ingress grpc example. Bazel
|
||||
0.12 is used for the building and container management.
|
||||
|
||||
## Build
|
||||
|
||||
Builds a statically compiled go binary cross-compiled for linux:
|
||||
|
||||
```
|
||||
$ bazel build //app:fortune
|
||||
Target //app:fortune up-to-date:
|
||||
bazel-bin/app/linux_amd64_static_pure_stripped/fortune
|
||||
```
|
||||
|
||||
> To build for your host system, comment out the `goos` and `goarch` attributes
|
||||
> in the `go_binary` rule.
|
||||
|
||||
## Run
|
||||
|
||||
Builds a minimal docker image that wraps the go_binary, loads it into your local
|
||||
docker image repository, and runs it:
|
||||
|
||||
```sh
|
||||
$ bazel run //app:image
|
||||
Loaded image ID: sha256:aa597c897c873116fcbfccafecf5ab0f6f4178a05e4a00c8e79de91ac0d2e9e7
|
||||
Tagging aa597c897c873116fcbfccafecf5ab0f6f4178a05e4a00c8e79de91ac0d2e9e7 as bazel/app:image
|
||||
2018/05/01 02:13:43 Restored /tmp/fortune-teller/usr/share/games/fortunes/fortunes.dat
|
||||
2018/05/01 02:13:43 Restored /tmp/fortune-teller/usr/share/games/fortunes/literature
|
||||
2018/05/01 02:13:43 Restored /tmp/fortune-teller/usr/share/games/fortunes/literature.dat
|
||||
2018/05/01 02:13:43 Restored /tmp/fortune-teller/usr/share/games/fortunes/riddles
|
||||
2018/05/01 02:13:43 Restored /tmp/fortune-teller/usr/share/games/fortunes/riddles.dat
|
||||
2018/05/01 02:13:43 Restored /tmp/fortune-teller/usr/share/games/fortunes/fortunes
|
||||
2018/05/01 02:13:43 Assets restored to /tmp/fortune-teller
|
||||
2018/05/01 02:13:43 Listening for gRPC requests at 50051
|
||||
```
|
||||
|
||||
Or run it via docker:
|
||||
|
||||
```sh
|
||||
$ docker run bazel/app:image
|
||||
```
|
||||
|
||||
Build image and push to the container registry specified in the `container_push`
|
||||
rule:
|
||||
|
||||
```sh
|
||||
$ bazel run //app:push
|
||||
```
|
||||
|
||||
## Invoke
|
||||
|
||||
```sh
|
||||
$ grpcurl -plaintext localhost:50051 build.stack.fortune.FortuneTeller/Predict
|
||||
{
|
||||
"message": "Whenever the literary German dives into a sentence, that is the last\nyou are going to see of him until he emerges on the other side of his\nAtlantic with his verb in his mouth.\n\t\t-- Mark Twain \"A Connecticut Yankee in King Arthur's Court\""
|
||||
}
|
||||
```
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
workspace(name = "com_github_kubernetes_ingress_nginx_images_grpc_fortune_teller")
|
||||
|
||||
#####################################################################
|
||||
# RULES_GO
|
||||
#####################################################################
|
||||
|
||||
git_repository(
|
||||
name = "io_bazel_rules_go",
|
||||
remote = "https://github.com/bazelbuild/rules_go.git",
|
||||
commit = "161c91485b007c6bf51c0e81808cf4ee2ded299d",
|
||||
)
|
||||
|
||||
http_archive(
|
||||
name = "com_github_scele_rules_go_dep",
|
||||
urls = ["https://github.com/scele/rules_go_dep/archive/49a5e4ca9f6a16c9b4c930a51ce3a537498bb4e1.tar.gz"],
|
||||
strip_prefix = "rules_go_dep-49a5e4ca9f6a16c9b4c930a51ce3a537498bb4e1",
|
||||
sha256 = "f170d3d6f55e216f1493f975cde6c489d7070da2a8a41fd4de9812d96f4fb38b",
|
||||
)
|
||||
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_rules_dependencies", "go_register_toolchains")
|
||||
load("@com_github_scele_rules_go_dep//dep:dep.bzl", "dep_import")
|
||||
|
||||
go_register_toolchains(go_version = "1.10.1")
|
||||
|
||||
go_rules_dependencies()
|
||||
|
||||
dep_import(
|
||||
name = "godeps",
|
||||
prefix = "github.com/kubernetes/ingress-nginx/images/grpc-fortune-teller",
|
||||
gopkg_lock = "//:Gopkg.lock",
|
||||
)
|
||||
|
||||
load("@godeps//:Gopkg.bzl", "go_deps")
|
||||
|
||||
go_deps()
|
||||
|
||||
#############################################################
|
||||
# RULES_DOCKER
|
||||
#############################################################
|
||||
|
||||
RULES_DOCKER_VERSION = "553d5506bb7325185950f91533b967da8f5bc536"
|
||||
|
||||
http_archive(
|
||||
name = "io_bazel_rules_docker",
|
||||
url = "https://github.com/bazelbuild/rules_docker/archive/%s.zip" % RULES_DOCKER_VERSION,
|
||||
strip_prefix = "rules_docker-" + RULES_DOCKER_VERSION,
|
||||
sha256 = "e0b3d966f2a5c0fe921b6294df7c823afa63b4c439f0a7f3b9da3ed6534bab83",
|
||||
)
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_docker//container:container.bzl",
|
||||
container_repositories = "repositories",
|
||||
)
|
||||
|
||||
container_repositories()
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_docker//go:image.bzl",
|
||||
go_image_repositories = "repositories",
|
||||
)
|
||||
|
||||
go_image_repositories()
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_embed_data")
|
||||
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
|
||||
load("@io_bazel_rules_docker//container:push.bzl", "container_push")
|
||||
|
||||
# Concatenates the fortune databases to a single bundle.
|
||||
# May need to adjust paths for your system (built on ubuntu 16.04).
|
||||
# $ apt-get install fortune
|
||||
genrule(
|
||||
name = "tar",
|
||||
outs = ["fortune.tar"],
|
||||
cmd = " && ".join([
|
||||
"OUT=$$(pwd)/$@",
|
||||
"tar -cvf $$OUT /usr/share/games/fortunes",
|
||||
]),
|
||||
)
|
||||
|
||||
# Generates a .go source file with the tarball content in
|
||||
# the fortuneFiles variable.
|
||||
go_embed_data(
|
||||
name = "fortune_assets",
|
||||
srcs = [
|
||||
":tar",
|
||||
],
|
||||
package = "main",
|
||||
unpack = True,
|
||||
var = "fortuneFiles",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"main.go",
|
||||
":fortune_assets", # keep
|
||||
],
|
||||
importpath = "github.com/kubernetes/ingress-nginx/images/grpc-fortune-teller/app",
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
"//proto/fortune:go_default_library",
|
||||
"@com_github_vromero_gofortune//lib/fortune:go_default_library",
|
||||
"@org_golang_google_grpc//:go_default_library",
|
||||
"@org_golang_google_grpc//codes:go_default_library",
|
||||
"@org_golang_google_grpc//reflection:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "fortune",
|
||||
embed = [":go_default_library"],
|
||||
goarch = "amd64",
|
||||
goos = "linux",
|
||||
pure = "on",
|
||||
static = "on",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
go_image(
|
||||
name = "image",
|
||||
binary = ":fortune",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
container_push(
|
||||
name = "push",
|
||||
format = "Docker",
|
||||
image = ":image",
|
||||
registry = "quay.io",
|
||||
repository = "kubernetes-ingress-controller/grpc-fortune-teller",
|
||||
tag = "0.1",
|
||||
)
|
||||
|
|
@ -1,137 +0,0 @@
|
|||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
proto "github.com/kubernetes/ingress-nginx/images/grpc-fortune-teller/proto/fortune"
|
||||
"github.com/vromero/gofortune/lib/fortune"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/reflection"
|
||||
)
|
||||
|
||||
const (
|
||||
grpcPort = 50051
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
baseDir := "/tmp/fortune-teller"
|
||||
mustMkdirAll(baseDir)
|
||||
|
||||
opts := []grpc.ServerOption{
|
||||
grpc.MaxConcurrentStreams(200),
|
||||
}
|
||||
|
||||
grpcServer := grpc.NewServer(opts...)
|
||||
|
||||
fortuneTeller := &FortuneTeller{
|
||||
fs: createFortuneFilesystemNodeDescriptor(baseDir),
|
||||
}
|
||||
proto.RegisterFortuneTellerServer(grpcServer, fortuneTeller)
|
||||
|
||||
reflection.Register(grpcServer)
|
||||
|
||||
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", grpcPort))
|
||||
if err != nil {
|
||||
log.Fatalf("Error while starting grpc server: %v\n", err)
|
||||
}
|
||||
|
||||
log.Printf("Listening for gRPC requests at %d\n", grpcPort)
|
||||
grpcServer.Serve(lis)
|
||||
}
|
||||
|
||||
// FortuneTeller - struct that will implement the grpc service interface.
|
||||
type FortuneTeller struct {
|
||||
fs *fortune.FileSystemNodeDescriptor
|
||||
}
|
||||
|
||||
// Predict - implementation for the grpc unary request method.
|
||||
func (f *FortuneTeller) Predict(ctx context.Context, r *proto.PredictionRequest) (*proto.PredictionResponse, error) {
|
||||
_, data, err := fortune.GetRandomFortune(*f.fs)
|
||||
if err != nil {
|
||||
return nil, grpc.Errorf(codes.Internal, "Unable to render fortune: %v", err)
|
||||
}
|
||||
return &proto.PredictionResponse{
|
||||
Message: data,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func createFortuneFilesystemNodeDescriptor(baseDir string) *fortune.FileSystemNodeDescriptor {
|
||||
|
||||
// Restore the packed fortune data
|
||||
fortuneDir := path.Join(baseDir, "usr/share/games/fortunes")
|
||||
|
||||
mustRestore(baseDir, fortuneFiles, nil)
|
||||
|
||||
// init gofortune fs
|
||||
fs, err := fortune.LoadPaths([]fortune.ProbabilityPath{
|
||||
{Path: fortuneDir},
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to load fortune paths: %v", err)
|
||||
}
|
||||
|
||||
fortune.SetProbabilities(&fs, true) // consider all equal probabilities
|
||||
return &fs
|
||||
}
|
||||
|
||||
// mustRestore - Restore assets.
|
||||
func mustRestore(baseDir string, assets map[string][]byte, mappings map[string]string) {
|
||||
// unpack variable is provided by the go_embed data and is a
|
||||
// map[string][]byte such as {"/usr/share/games/fortune/literature.dat":
|
||||
// bytes... }
|
||||
for basename, bytes := range assets {
|
||||
if mappings != nil {
|
||||
replacement := mappings[basename]
|
||||
if replacement != "" {
|
||||
basename = replacement
|
||||
}
|
||||
}
|
||||
filename := path.Join(baseDir, basename)
|
||||
dirname := path.Dir(filename)
|
||||
//log.Printf("file %s, dir %s, rel %d, abs %s, absdir: %s", file, dir, rel, abs, absdir)
|
||||
if err := os.MkdirAll(dirname, os.ModePerm); err != nil {
|
||||
log.Fatalf("Failed to create asset dir %s: %v", dirname, err)
|
||||
}
|
||||
|
||||
if err := ioutil.WriteFile(filename, bytes, os.ModePerm); err != nil {
|
||||
log.Fatalf("Failed to write asset %s: %v", filename, err)
|
||||
}
|
||||
log.Printf("Restored %s", filename)
|
||||
}
|
||||
|
||||
log.Printf("Assets restored to %s", baseDir)
|
||||
}
|
||||
|
||||
// mustMkdirAll - make all dirs and panic if fail
|
||||
func mustMkdirAll(dirs ...string) {
|
||||
for _, dir := range dirs {
|
||||
err := os.MkdirAll(dir, os.ModePerm)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("Failed mkdir %s: %v", dir, err))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
||||
load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["doc.go"],
|
||||
embed = [":build_stack_fortune_go_proto"], # keep
|
||||
importpath = "github.com/kubernetes/ingress-nginx/images/grpc-fortune-teller/proto/fortune",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
proto_library(
|
||||
name = "build_stack_fortune_proto",
|
||||
srcs = ["fortune.proto"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
go_proto_library(
|
||||
name = "build_stack_fortune_go_proto",
|
||||
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
|
||||
importpath = "github.com/kubernetes/ingress-nginx/images/grpc-fortune-teller/proto/fortune",
|
||||
proto = ":build_stack_fortune_proto",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
syntax = "proto3";
|
||||
|
||||
package build.stack.fortune;
|
||||
|
||||
message PredictionRequest {
|
||||
}
|
||||
|
||||
message PredictionResponse {
|
||||
string message = 1;
|
||||
}
|
||||
|
||||
service FortuneTeller {
|
||||
rpc Predict(PredictionRequest) returns (PredictionResponse);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue