入口资源无法路由正确公开的服务

时间:2018-07-02 10:57:16

标签: kubernetes google-kubernetes-engine kubernetes-ingress

我正在尝试使用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 :(得分:0)

1)入口是Kubernetes资源,它封装了用于将外部HTTP(S)流量路由到内部服务的规则和配置的集合。 入口控制器负责读取入口资源信息并相应地处理该数据,您需要一个入口控制器来满足入口,仅创建资源将无效。

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

Ingress已紧密集成到Kubernetes中,这意味着您围绕kubectl的现有工作流程可能会很好地扩展到管理Ingress。请注意,入口控制器通常并不能消除对外部负载平衡器的需求。入口控制器只是在负载平衡器后面增加了一层路由和控制层。

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

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