kubernetes - 为什么入口服务有地址?那个地址有什么用?
问题描述
我使用 Ingress Controller 在 GKE 上部署集群
我使用Helm安装以下内容:
- 安装入口控制器
- 已部署负载均衡器服务(也在 GCP 上创建负载均衡器)
我还部署了入口对象(配置如下)
然后我观察到以下状态......
Ingress Controller暴露(通过负载均衡器服务)具有两个端点:35.197.XX.XX:80、35.197.XX.XX:443
这两个端点由云负载均衡器公开。我没有问题。
但是,当我执行时kubectl get ing ingress-service -o wide
,它会打印出以下信息。
NAME HOSTS ADDRESS PORTS AGE
ingress-service k8s.XX.com.tw 34.87.XX.XX 80, 443 5h50m
我真的不使用ADDRESS栏下的IP。
我还可以看到 Google 在我的 Ingress 配置文件的末尾添加了一些关于负载均衡器 IP 的额外信息。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
....(ommitted)
spec:
rules:
- host: k8s.XX.com.tw
http:
paths:
- backend:
serviceName: client-cluster-ip-service
servicePort: 3000
path: /?(.*)
- backend:
serviceName: server-cluster-ip-service
servicePort: 5000
path: /api/?(.*)
tls:
- hosts:
- k8s.XX.com.tw
secretName: XX-com-tw
status:
loadBalancer:
ingress:
- ip: 34.87.XX.XX
根据Google 的文档,这个(34.87.XX.XX)看起来像一个外部 IP,但我无法使用http://34.87.XX.XX访问它
我的问题是,既然我们已经有一个外部 IP (35.197.XX.XX) 来接收流量,为什么我们需要这个地址用于入口服务?
如果它是内部或外部 IP 地址?这个地址绑定到什么?这个地址到底是做什么用的?
任何人都可以解释一下吗?非常感谢!
解决方案
如果你只是去看看文档,你就会得到答案。
什么是入口资源:https ://kubernetes.io/docs/concepts/services-networking/ingress/#what-is-ingress
所以按照文档:
Ingress 将来自集群外部的 HTTP 和 HTTPS 路由暴露给集群内的服务。流量路由由 Ingress 资源上定义的规则控制。
为了更准确地描述云提供商,入口将创建一个负载均衡器以将服务公开给互联网。关于 gke 特定主题的文档:https ://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer
这就解释了为什么你有一个外部 IP 用于入口。
你现在应该做什么:
- 如果您不想公开 HTTP 或/和 HTTPS 端口,只需删除入口资源,您就不要使用它,所以它几乎没用。
- 如果您使用的是 HTTP/HTTPS 资源,请将您的服务类型更改为 nodePort 并将负载均衡器的管理留给入口。
我的观点是,当您部署入口控制器时,您应该选择第二个选项并将负载均衡器的管理留给它。对于 ingress-controller 的 ingress,不要只在 nodePort 服务的后端定义规则,规则应该在每个应用程序的特定 ingress 中定义,并由 ingress-controller 管理。
推荐阅读
- python - 缩短深度导入/长命名空间
- android - 多个连接时切换蓝牙 SCO(耳机)设备
- flutter - 如何为多页 PageView 的第一页自定义页面滚动行为?
- jquery - 在引导下拉列表中使用 django 进行 Ajax 调用
- asterisk - Asterisk FreePBX 视频通话录音文件在哪里
- python - Pandas 有没有办法将 .rename() 应用于数据帧的过滤子集?
- c# - 流实现 - 覆盖 Dispose 或 DisposeAsync 或两者?
- c# - 如何在 SelectionChanged 上运行昂贵的进程,但在快速滚动时却不行。(延迟事件处理程序)?
- mapbox-gl-js - 从deckl地图导出png
- android - 如何修复 PJSIP Android Xamarin.Forms (Endpoint_libCreate) 中的崩溃