繁体   English   中英

GKE 入口多路径基础路由

[英]GKE ingress multi path base routing

需要帮助在 GKE ingress(不是 nginx)中创建多路径基础路由。 我有一个主机指向 GKE 入口,它在单个后端上工作正常,现在我尝试用不同的路径 (/app1) 和服务名称更新另一个后端,但它给出错误“无法获取/app1”。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "ingress"
spec:
  rules:
  - host: "mydomain.com"
    http:
      paths:
      - path: /
        pathType: ImplementationSpecific
        backend:
          service:
            name: my-app
            port:
              number: 8080
      - path: /app1
        pathType: ImplementationSpecific
        backend:
          service:
            name: app1
            port:
              number: 8080

访问/app1时出现 404 错误

这个问题有以下三种可能:

1 . 检查容器端口是否打开。 你可以使用 .netstat 检查它:

 $ kubectl exec -ti <hostname> -c container -- bin/sh / 
  / # netstat -plnt

2.问题也可能是由防火墙配置引起的。 确保您有正确的防火墙设置。

3.另一个原因可能是端口、容器端口和目标端口之间配置错误。 验证您是否设置了正确的端口、目标端口和服务端口。

GCP Ingress支持多路径。 我已经使用 Hello-world v1 和 v2 使用 Ingress 设置 HTTPS(S) 负载平衡测试了基于入口多路径的路由。

这是我部署的配置文件。

第一个部署配置文件:

$纳米部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: firstdeployment
  labels:
    app: api
spec:
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        -  name: container
           image: gcr.io/google-samples/hello-app:1.0
           ports:
           - containerPort: 8080
---
 
apiVersion: v1
kind: Service
metadata:
  name: first-service
   labels:
     app: api
spec:
  type: NodePort
  selector:
    app: api
  ports:
  - port: 5000
    targetPort: 8080

第二个部署配置文件:

$纳秒.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: second-deployment
  labels:
    app: api-2
spec:
  selector:
    matchLabels:
      app: api-2
  template:
    metadata:
      labels:
        app: api-2
    spec:
      containers:
        - name: container
          image: gcr.io/google-samples/hello-app:2.0
          ports:
          - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: second-service
  labels:
    app: api-2
spec:
  type: NodePort
  selector:
    app: api-2
    ports:
    - port: 6000
      targetPort: 8080

入口资源配置文件:

Ingress 是一种 Kube.netes 资源,它封装了一组规则和配置,用于将外部 HTTP(S) 流量路由到内部服务。

$ nano Ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: first-service
            port:
              number: 5000
      - path: /app1
        pathType: Prefix
        backend:
          Service:
            name: second-service
            port:
              number: 6000

现在,通过运行以下命令找出为您的应用程序提供服务的负载均衡器的外部 IP 地址:

$ kubectl get ingress <ingress-name>

在此处输入图像描述

注意:您可以通过在 Ingress 清单中提供 defaultBackend 字段来指定默认后端 任何与规则字段中的路径不匹配的请求都将发送到 defaultBackend 字段中指定的服务和端口。 例如,在上面的 Ingress 中,任何不匹配 / 或 /app1 的请求都会发送到端口 5001 上名为 first-service 的服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM