首页 文章

Ingress资源不允许访问公开的服务

提问于
浏览
1

嗨,我目前正在尝试使用谷歌kubernetes引擎部署我的应用程序 . 我将我的前后服务暴露为NodePort,我创建了一个名为“ip”的全局静态IP地址 . 我创建了一个入口资源 . 入口资源工作正常,直到我添加了路径规则 .

这是我的入口资源

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

这是我的服务回来:

apiVersion: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

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

1 回答

  • 0

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

    顾名思义,NodePort在所有节点(VM)上打开一个特定端口,并且发送到该端口的任何流量都将转发到该服务 .

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

    请记住,两个服务的 ingress.global-static-ip-nametargetPort 都是您的Pods端口值 .

    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
    

    如果新配置不合适,请写一条评论详情 .

    (我想说 Thank youAnton Kostenko用于帮助手并使配置文件正常工作)

相关问题