【问题标题】:Why Secure GRPC calls do not reach ingress gateway?为什么安全 GRPC 调用无法到达入口网关?
【发布时间】:2019-11-21 07:49:33
【问题描述】:

我在 kubernetes (1.12.x) 中安装了 istio 1.22.2 并启用了 sds。我一直在关注this,并且能够在入口网关处为正常服务(在 HTTP/1.1 上)进行 ssl 终止。我可以在网关的访问日志中看到它。

网关

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: mygateway
spec:
  selector:
    istio: ingressgateway # use istio default ingress gateway
  servers:
  - port:
      number: 31400
      name: tcp
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: "review-this-co" # must be the same as secret
    hosts:
- "xyz.example.com"

但是,当通过安全通道使用 GRPC 时,我看不到任何访问日志。 (Grpc 客户端失败)。我期待 grpc 也有类似的行为(即入口网关处的 ssl 终止)。

注意:如果网关配置如下,则相同的 grpc 客户端可以使用纯文本(调用到达入口网关,在访问日志中可见)

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: mygateway
spec:
  selector:
    istio: ingressgateway # use istio default ingress gateway
  servers:
  - port:
      number: 31400
      name: tcp
      protocol: GRPC
    hosts:
    - "xyz.example.com"

已使用网络负载均衡器(通过)

【问题讨论】:

  • 能否分享 grpc java 客户端的源代码,用于初始化 Istio 的配置设置,尤其是与 Ingress 网关相关的配置设置以及用于运行 grpc 服务器的其余清单文件。

标签: kubernetes grpc istio grpc-java


【解决方案1】:

如果我理解正确的话,这里的事情是:

  • GRPC 目前在 HTTP2 类型的传输上工作

  • 当前入口无法HTTP2

那么您确定您的客户使用的是HTTP1?因为否则它可能无法正常工作。

如果有帮助,请告诉我。

【讨论】:

  • Istio 入口代理(即 envoy)确实支持 GRPC(HTTP2)。此外,grpc 调用无需 TLS/SSL 即可到达目标服务。
【解决方案2】:

用 istio 试试 grpc greeter,它对我有用。

# greeter.yaml

apiVersion: v1
kind: Service
metadata:
  name: greeter
  labels:
    app: greeter
spec:
  ports:
  - name: grpc
    port: 50051
  selector:
    app: greeter
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: greeter
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: greeter
        version: v1
    spec:
      containers:
      - image: tobegit3hub/grpc-helloworld
        imagePullPolicy: IfNotPresent
        name: greeter
        ports:
        - containerPort: 50051
# gateway.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: greeter-gateway
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - 'xyz.example.com'
# virtualservice.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: greeter
spec:
  hosts:
    - 'xyz.example.com'
  gateways:
    - greeter-gateway
  http:
    - match:
        - uri:
            prefix: /
      route:
        - destination:
            host: greeter
            port:
              number: 50051
# grpc greeter client
docker run  -it tobegit3hub/grpc-helloworld /greeter_client.py xyz.example.com:80

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    相关资源
    最近更新 更多