Как настроить NGINX Ingress для GKE gRPC - PullRequest
0 голосов
/ 23 марта 2020

Последние две недели я работаю над развертыванием службы gRP C (также со шлюзом gRP C). Я застрял во многих моментах, и это все еще не работает ... Почему? Я не уверен, что знаю.

Сначала я использовал Ingress от Google, но он не работал с gRP C, поэтому я перешел на Ingress NGINX, но у меня все еще есть проблемы ...

Я установил NGINX из https://kubernetes.github.io/ingress-nginx/deploy/#gce -gke

Я добавил несколько аннотаций:

kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
nginx.ingress.kubernetes.io/grpc-backend: "true"

service.yaml (содержит мои Службу, Развертывание, Вход (gRP C) и Вход (REST))

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: gkegrpcservice
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      run: gkegrpcservice
  template:
    metadata:
      labels:
        run: gkegrpcservice
    spec:
      containers:
        - name: gkegrpcservice
          image: gcr.io/<PROJECT_ID>/gkegrpcservice:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
            - containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/app-protocols: '{"grpc":"HTTP2"}'
  name: gkegrpcservice
  namespace: default
spec:
  type: NodePort
  selector:
    run: gkegrpcservice
  ports:
    # Port that accepts gRPC and JSON/HTTP2 requests over HTTP.
    - port: 8080
      targetPort: 8080
      protocol: TCP
      name: grpc
    # Port that accepts REST requests over HTTP.
    - port: 8081
      targetPort: 8081
      protocol: TCP
      name: rest
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gkegrpcservice-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
    nginx.ingress.kubernetes.io/grpc-backend: "true"
  namespace: default
spec:
  rules:
    - http:
        paths:
          - path: /GKEgRPCService.GKEgRPCService/*
            backend:
              serviceName: gkegrpcservice
              servicePort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gkegrpcservice-gateway-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /rest/*
            backend:
              serviceName: gkegrpcservice
              servicePort: 8081

Я также создал репозиторий github, чтобы вы могли получить доступ ко всему коду / Конфигурация, а также Dockerfile и service.yaml: https://github.com/Emixam23/GKE-gRPC-Service-Ingress

на основе вышеизложенного, я тогда опишу свой Ingress:

MacBook-Pro-de-Emixam23:src emixam23$ kubectl describe ingress
Name:             gkegrpcservice-gateway-ingress
Namespace:        default
Address:          35.228.118.83
Default backend:  default-http-backend:80 (10.4.2.7:8080)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     
        /rest/*   gkegrpcservice:8081 (10.4.1.25:8081)
Annotations:
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx","nginx.ingress.kubernetes.io/ssl-redirect":"false"},"name":"gkegrpcservice-gateway-ingress","namespace":"default"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"gkegrpcservice","servicePort":8081},"path":"/rest/*"}]}}]}}

  kubernetes.io/ingress.class:               nginx
  nginx.ingress.kubernetes.io/ssl-redirect:  false
Events:
  Type    Reason  Age                 From                      Message
  ----    ------  ----                ----                      -------
  Normal  CREATE  26m                 nginx-ingress-controller  Ingress default/gkegrpcservice-gateway-ingress
  Normal  UPDATE  115s (x3 over 26m)  nginx-ingress-controller  Ingress default/gkegrpcservice-gateway-ingress


Name:             gkegrpcservice-ingress
Namespace:        default
Address:          35.228.118.83
Default backend:  default-http-backend:80 (10.4.2.7:8080)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     
        /GKEgRPCService.GKEgRPCService/*   gkegrpcservice:8080 (10.4.1.25:8080)
Annotations:
  nginx.ingress.kubernetes.io/backend-protocol:      GRPC
  nginx.ingress.kubernetes.io/grpc-backend:          true
  nginx.ingress.kubernetes.io/ssl-redirect:          false
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx","nginx.ingress.kubernetes.io/backend-protocol":"GRPC","nginx.ingress.kubernetes.io/grpc-backend":"true","nginx.ingress.kubernetes.io/ssl-redirect":"false"},"name":"gkegrpcservice-ingress","namespace":"default"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"gkegrpcservice","servicePort":8080},"path":"/GKEgRPCService.GKEgRPCService/*"}]}}]}}

  kubernetes.io/ingress.class:  nginx
Events:
  Type    Reason  Age    From                      Message
  ----    ------  ----   ----                      -------
  Normal  CREATE  6m43s  nginx-ingress-controller  Ingress default/gkegrpcservice-ingress
  Normal  UPDATE  6m6s   nginx-ingress-controller  Ingress default/gkegrpcservice-ingress

Отсюда 35.228.118.83 / rest / health_check должен вернуться

200 {} Но только 404 будут возвращены ...

enter image description here

Однако, это (для меня) не имеет смысла, даже если убрать / rest / , я должен получить ответ, но ОК, это не так работа.

Затем я перехожу к своему входному контроллеру f Решли созданы из ссылки выше. Журналы, которые я получаю:

enter image description here

Я не совсем понимаю все журналы, но, кажется, они не показывают много о том, как я пингуюсь .. .

Кто-нибудь имеет представление о том, что на самом деле происходит, и если у меня есть какой-нибудь способ, возможно, что-то отладить? Потому что сейчас, на основе Inte rnet, я хорош для go, но в действительности, кажется, ничего не работает вообще ...

...