首页 文章

Ingress资源不能正确地公开服务

提问于
浏览
0

我正在尝试使用GKE部署我的应用程序:我使用此链接添加了一个入口资源https://kubernetes.io/docs/concepts/services-networking/ingress/

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

并将我的服务公开为NodePort:只有映射到“/”的服务有效(我使用前后服务测试)

(映射到此的路径不起作用

[IP] /返回/(我的路径)

在教程中我发现了这句话:

您需要一个Ingress控制器来满足Ingress,只需创建资源就无效了 .

我的问题是:

1)入口资源和控制器之间有什么区别?

2)默认情况下GKE是否提供入口控制器,还是应该手动添加它以修复路径问题?

3)我的配置还有什么问题

Ps:这是我的一项服务

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

这就是我描述我的入口时所得到的

Annotations:
  ingress.kubernetes.io/url-map:                k8s-um-default-ingress--17c7235ab3ece101
  kubernetes.io/ingress.global-static-ip-name:  app-ip
  ingress.kubernetes.io/backends:               {"k8s-be-31278--17c7235ab3ece101":"HEALTHY","k8s-be-32112--17c7235ab3ece101":"HEALTHY","k8s-be-32287--17c7235ab3ece101":"HEALTHY"}
  ingress.kubernetes.io/forwarding-rule:        k8s-fw-default-ingress--17c7235ab3ece101
  ingress.kubernetes.io/target-proxy:           k8s-tp-default-ingress--17c7235ab3ece101


Events:   Type    Reason   Age               From                     Message   ----    ------   ----              ----                    
-------

 Warning  UrlMap   46m (x5 over 4h)  loadbalancer-controller  googleapi: Error 412: Invalid fingerprint., conditionNotMet

  Normal  Service  4m (x22 over 2h)  loadbalancer-controller  no user specified default backend, using system default

1 回答

  • 0

    1)Ingress是一个Kubernetes资源,它封装了一系列规则和配置,用于将外部HTTP(S)流量路由到内部服务 . 入口控制器负责读取入口资源信息并相应地处理该数据, You need an Ingress controller to satisfy an Ingress, simply creating the resource will have no effect.

    2)默认情况下是GLBC,您可以在不使用入口资源的情况下部署应用程序 . GKE默认使用GLBC GLBC入口控制器,您不必配置路径,因为路径是在入口资源(您的YAML文件)中配置的 .

    Ingress与Kubernetes紧密集成,这意味着围绕kubectl的现有工作流程很可能会很好地扩展到管理入口 . 请注意,入口控制器通常不会消除对外部负载 balancer 器的需求 - 入口控制器只需在负载 balancer 器后面添加一层额外的路由和控制 .

    3)根据您的Ingress资源yaml: - 使用以/ Back /开头的路径将请求路由到backapp服务 . - 将所有其他请求路由到frontapp服务 .

    在检查了Yaml配置和您正在获取的UrlMap之后,我建议您根据规则添加主机,因为没有主机的IngressRule会获得通配符 .

相关问题