簡體   English   中英

Ingress 使用 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:LoadBalancerkubernetes 服務之間存在差異。

總而言之(並且為了將來自外部世界的流量重定向到您的 k8s clusterIp 服務)

  • 你需要一個負載均衡器來讓你的kind:Ingress工作嗎? 是的,這就是kind:IngressController kubernetes 資源。
  • 您是否需要 kubernetes 服務type:LoadBalancertype:NodePort來使您的kind:Ingress工作? 絕對沒有! 服務type:ClusterIP工作正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM