kubernetes - 入口资源未路由正确公开的服务
问题描述
我正在尝试使用 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]/back/(我的路径)
在教程中我发现了这句话:
你需要一个 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) Ingress 是一个 Kubernetes 资源,它封装了一组规则和配置,用于将外部 HTTP(S) 流量路由到内部服务。Ingress 控制器负责读取 Ingress Resource 信息并相应地处理该数据,您需要一个 Ingress 控制器来满足 Ingress,简单地创建资源将没有任何效果。
2)默认情况下是它的GLBC,您可以在不使用入口资源的情况下部署应用程序。GKE 默认使用GLBC作为 GLBC 入口控制器,您不必配置路径,因为路径是在入口资源(您的 YAML 文件)中配置的。
Ingress 与 Kubernetes 紧密集成,这意味着围绕 kubectl 的现有工作流可能会很好地扩展到管理 Ingress。请注意,入口控制器通常不会消除对外部负载平衡器的需求——入口控制器只是在负载平衡器后面添加一个额外的路由和控制层。
3)根据您的 Ingress 资源 yaml : - 将路径以 /Back/ 开头的请求路由到 backapp 服务。- 将所有其他请求路由到 frontapp 服务。
在检查 Yaml 配置和您获得的 UrlMap 后,我建议您在规则下添加主机,因为没有主机的 IngressRule 会获取通配符。
推荐阅读
- php - 防止从外部网站重定向到我的域
- javascript - 意外令牌或使用 JSON 解析转换循环结构
- events - Gitlab push events
- jpa - 如何在 JPA 中使用多个外键?
- python - How to change tick labels in seaborn.PairGrid
- javascript - 集成 axios 后出现“未找到模块”babel 错误
- javascript - I'm trying to source values for a select drop down from a table using JavaScript and jQuery, but the select menu doesn't show any values?
- wordpress - In Woocommerce, how to add custom attribute total on cart page
- javascript - JavaScript 对不同的 id 使用相同的函数
- android - 尝试显示存储库中的结果时,ViewModel 类抛出空指针