Развертывание сервера Rest + gRPC на k8s с входом

Я использовал пример приложения gRPC HelloWorld https://github.com/grpc/grpc-go/tree/master/examples/helloworld. Этот пример работает гладко в локальной системе.

Я хочу развернуть его в kubernetes с использованием Ingress.

Ниже мои конфигурационные файлы.

service.yaml — как NodePort

apiVersion: v1
kind: Service
metadata:
  name: grpc-scratch
  labels:
    run: grpc-scratch
  annotations:
    service.alpha.kubernetes.io/app-protocols: '{"grpc":"HTTP2"}'
spec:
  type: NodePort
  ports:
  - name: grpc
    port: 50051
    protocol: TCP
    targetPort: 50051
  selector:
    run: example-grpc

ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: grpc-ingress
  annotations:
    nginx.org/grpc-services: "grpc"
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/tls-acme: true
spec:
  tls:
    - hosts:
        - xyz.com
      secretName: grpc-secret
  rules:
    - host: xyz.com
      http:
        paths:
          - path: /grpc
            backend:
              serviceName: grpc
              servicePort: 50051

Я не могу отправить запрос gRPC на сервер с URL-адресом xyz.com/grpc. Получение ошибки

{
  "error": "14 UNAVAILABLE: Name resolution failure"
}

Если я сделаю запрос к xyz.com, ошибка будет

{
  "error": "14 UNAVAILABLE: Trying to connect an http1.x server"
}

Любая помощь будет оценена по достоинству.


person Tushar Sheth    schedule 10.04.2019    source источник
comment
Ваша служба определяет порт 8081, но ваш вход требует порт 50051. Почему?   -  person Mad Wombat    schedule 10.04.2019
comment
@MadWombat обновил сервис. Это был другой сервис, указывающий на разностный порт.   -  person Tushar Sheth    schedule 11.04.2019
comment
@TusharSheth Можете ли вы также поделиться своим манифестом развертывания?   -  person A_Suh    schedule 11.04.2019
comment
github.com/kubernetes/ingress-nginx/issues/2497   -  person Mad Wombat    schedule 11.04.2019
comment
Что вы используете в качестве входного контроллера? гке? нгинкс? хоть что-то?   -  person A_Suh    schedule 23.04.2019
comment
@A_Suh Я использую его для gke.   -  person Tushar Sheth    schedule 24.04.2019
comment
@TusharSheth, тогда почему вы используете аннотацию kubernetes.io/ingress.class: "nginx"?   -  person A_Suh    schedule 26.04.2019


Ответы (1)


Серверная часть входного объекта представляет собой комбинацию имен службы и порта.

В вашем случае у вас есть serviceName: grpc в качестве бэкэнда, а фактическое имя вашего сервиса name: grpc-scratch

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: grpc-ingress
  annotations:
    nginx.org/grpc-services: "grpc"
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/tls-acme: true
spec:
  tls:
    - hosts:
        - xyz.com
      secretName: grpc-secret
  rules:
    - host: xyz.com
      http:
        paths:
          - path: /grpc
            backend:
              serviceName: grpc-scratch
              servicePort: grpc
person A_Suh    schedule 13.05.2019