kubernetes - Ingress 使用 clusterIP 类型公开服务
问题描述
是否可以通过具有 ClusterIP 类型的入口来公开服务?
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-service
ports:
- name: my-service-port
port: 4001
targetPort: 4001
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my.example.com
http:
paths:
- path: /my-service
backend:
serviceName: my-service
servicePort: 4001
我知道该服务可以使用 NodePort 的类型公开,但是如果有人可以告诉我从云中的互联网世界检测内部服务的最快方法是什么,它可能会花费更多的 NAT 连接。
解决方案
不,clusterIP 只能从集群内访问。Ingress 本质上只是一组第 7 层转发规则,它不处理第 4 层将集群内部暴露给外界的要求。至少需要 1 个 NAT 步骤。
但是,要使 Ingress 正常工作,您至少需要涉及一项服务,将您的工作负载暴露在外部,例如 nodePort 或 loadBalancer。您的入口控制器和集群的基础设施将决定您需要使用这两种服务中的哪一种。
在 Nginx 入口的情况下,您需要有一个 LoadBalancer 服务,入口将使用该服务将流量从集群外部桥接到集群内部。之后,您可以为每个工作负载使用 clusterIP 服务。
在上面的示例中,只要正确配置了 nginx 入口控制器(使用负载均衡器),那么您使用的配置应该可以正常工作。
推荐阅读
- java - Predix Cloud Foundry App Heap 内存不足问题
- opencv - 从 Emgu::CV::Mat 获取 C++ OpenCV Mat 类型
- php - 卷曲请求到 PHP 卷曲请求
- excel - 有没有办法将 FALSE 值带到列的顶部?
- android - 如何使用子片段在自定义操作栏中更改文本视图的文本
- r - readOGR 无法识别投影
- coq - Coq 统一记录参数
- php - Laravel:CRUD 更新表单
- c# - c#InstalledFontCollection 不显示所有字体,如 MS Word
- go - 在 Golang 中是否存在与 strings.Repeat("0", 3) (检测前导零的数量)相反的嵌入?