[英]Kubernetes - Have an ingress on a service - is it ok for its type to be ClusterIP
[英]Ingress expose the service with the type 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 入口控制器(使用負載均衡器),那么您使用的配置應該可以正常工作。
簡而言之:是的
首先,讓我們來看看官方文檔是怎么說的:
Ingress 將來自集群外部的 HTTP 和 HTTPS 路由暴露給集群內的服務。
[...]
Ingress 控制器負責完成 Ingress,通常帶有負載均衡器...
這里令人困惑的是術語Load balancer 。 在上面的定義中,我們談論的是 Web 負載均衡器中的經典和眾所周知的。
這個和 kubernetes 無關!
回到定義,要使用Ingress
並使其工作,我們需要一個名為IngressController
的 kubernetes 資源。 而這個資源恰好是一個負載均衡器! 就是這樣。
但是,您必須記住,外部世界中的負載均衡器與類型為type:LoadBalancer
的kubernetes 服務之間存在差異。
總而言之(並且為了將來自外部世界的流量重定向到您的 k8s clusterIp 服務) :
kind:Ingress
工作嗎? 是的,這就是kind:IngressController
kubernetes 資源。type:LoadBalancer
或type:NodePort
來使您的kind:Ingress
工作? 絕對沒有! 服務type:ClusterIP
工作正常!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.