【问题标题】:Ingress resource does not give access to exposed servicesIngress 资源不允许访问暴露的服务
【发布时间】:2018-12-05 06:10:31
【问题描述】:

您好,我目前正在尝试使用 google kubernetes 引擎部署我的应用程序。我将前端和后端服务公开为 NodePort,创建了一个名为“ip”的全局静态 IP 地址。我创建了一个入口 ressource 。 在我添加路径规则之前,入口资源工作正常。

这是我的入口资源

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: ip
  labels:
    app: myapp
    part: ingress
spec:
 rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: backapp
          servicePort: 9000
      - path: /front/*
        backend:
          serviceName: frontapp
          servicePort: 3000

这是我的服务 返回:

api版本:v1 种类:服务 元数据:

  labels:
    app: myapp
    part: back
  name: backapp
  namespace: default
spec:
  clusterIP: 10.*.*.*
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30646
    port: 9000
    protocol: TCP
    targetPort: 9000
  selector:
    app:  myapp
    part: back
  sessionAffinity: None
  type: NodePort

正面:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myapp
    part: front
  name: frontapp
  namespace: default
spec:
  clusterIP: 10.*.*.*
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31609
    port: 3000
    protocol: TCP
    targetPort: 3000
  selector:
     app: myapp
     part: front
  sessionAffinity: None
  type: NodePort

每次我尝试去 http://external-ingress-ip/front

http://external-ingress-ip/front/home

http://external-ingress-ip/users

http://external-ingress-ip/...

我得到的只是default backend - 404

所以我的问题是:我的配置有什么问题,添加路径时发生了什么变化?

【问题讨论】:

  • 尝试从路径和正斜杠中删除*符号,会发生什么?
  • 感谢您的回复。我试过没有 * 和没有 * 和正斜杠。它没有工作,仍然是同样的问题
  • 能否也添加前台服务?
  • 我编辑了我的帖子以包括前台服务。事实上,我将资源更改为 - http:paths: - path: /* backend: serviceName: frontapp servicePort: 3000 - path: /back/* backend: serviceName: backapp servicePort: 9000 映射到的服务 (/* 工作正常(我每次都尝试将这两个服务映射到 /* 并且每次它工作时,但映射到 external-ingress-ip/back 的另一个服务返回 404 错误)
  • 你是如何提出请求的?

标签: kubernetes kubernetes-ingress


【解决方案1】:

Kubernetes NodePort 服务是将外部流量直接获取到您的服务的最基本方式。

NodePort,顾名思义,打开所有节点(VM)上的特定端口,以及 被发送到这个端口被转发到服务。

回到你的问题。 尝试使用该配置。它更清晰一些,只包含需要的选项。

请记住,ingress.global-static-ip-nametargetPort 的两个服务都与您的 Pod 端口值一致。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: $IP # Reserved IP address
  labels:
    app: myapp
    part: ingress
spec:
 rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: backapp
          servicePort: 9000
      - path: /front/*
        backend:
          serviceName: frontapp
          servicePort: 3000`

此外,还需要定义单独的服务来处理传入流量:

 apiVersion: v1
 kind: Service
 metadata:
   labels:
     app: myapp
     part: back
   name: backapp
   namespace: default
 spec:
   ports:
   - port: 9000
     protocol: TCP
     targetPort: 9000 # Port on the pod with 'back' application
   selector:
     app: myapp
     part: back
   type: NodePort

前端服务的第二个配置:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myapp
    part: front
  name: frontapp
  namespace: default
spec:
  ports:
  - port: 3000
    protocol: TCP
    targetPort: 3000 # Port on the pod with 'front' application
  selector:
     app: myapp
     part: front
  type: NodePort

如果新配置不行,请写评论,详细说明。

(我想对Anton Kostenko 表示感谢,感谢您提供帮助并让配置文件正常工作)

【讨论】:

  • 非常感谢您的回复,很抱歉迟到了。我做了更改,但它没有工作(只有链接到根(/)的服务
猜你喜欢
  • 2021-07-16
  • 2022-01-16
  • 1970-01-01
  • 2021-08-13
  • 2021-07-03
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多