kubernetes 如何通过k8s入口访问grpc服务?

rn0zuynd  于 2023-04-29  发布在  Kubernetes
关注(0)|答案(1)|浏览(224)

我有一个grpc服务,这里是yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: staging
  labels:
    app: staging
spec:
  replicas: 4
  selector:
    matchLabels:
      app: staging
  template:
    metadata:
      labels:
        app: staging
    spec:
      containers:
      - name: staging
        image: ...
        imagePullPolicy: Always

        ports:
        - containerPort: 5274
        - containerPort: 5900
---
apiVersion: v1
kind: Service
metadata:
  name: staging-service
spec:
  type: NodePort
  selector:
    app: staging
  ports:
    - name: staging
      protocol: TCP
      port: 5274
      targetPort: 5274
      nodePort: 30277
    - name : staging
      protocol: TCP
      port: 5900
      targetPort: 5900
      nodePort: 30278

正如你所看到的,grpc在5900端口上,现在我有一个ingres yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: k8s-rpc-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
spec:
  ingressClassName: nginx
  rules:
    -http:
      paths:
      - path: /st(/|$)(.*)
        pathType: Prefix
        backend:
              service:
                name: staging-service
                port:
                  number: 5900

现在,k8s主程序是 www.example.com ,所以如果我访问 www.example.com 在我的nestjs项目像:

url: ‘192.168.70.1/st’,
    package: ‘test’,

我会得到错误:

details: ‘Name resolution failed for target dns:192.168.70.1/st’,

如果我通过192访问GRPC服务。168.70.1:30378一切都很好
我是不是漏掉了什么?
谢谢你

rdlzhqv9

rdlzhqv91#

gRPC支持DNS作为默认名称系统。支持以下与IPV4地址相关的格式。

ipv4:address[:port][,address[:port],...] -- IPv4地址

在这里,您可以指定多个逗号分隔的地址,格式为address[:port]:

address是要使用的IPv4地址。
port是要使用的端口。如果未指定,则使用443。

这就是为什么您可以通过www. example访问grpc服务的原因 www.example.com
您可以参考link以获取更多有用信息。

相关问题