k8s服务的外网IP和Ingress有什么区别

What are the differences between k8s service 's external IP and Ingress

我是 kubernetes 的新手。在用于创建服务的 yaml 文件中,我定义了 externalIPs 值以便从集群外部访问服务:

kind: Service
apiVersion: v1
metadata:
  name: mytestservice
spec:
  type: ClusterIP
  clusterIP: 10.96.1.113
  externalIPs:
    - 172.16.80.117
  ports:
    - name: tcp-8088
      protocol: TCP
      port: 8088
      targetPort: 8088:
  selector:
    service-app: mytestservice

它工作得很好,我可以使用 externalIp:port 调用我的服务(本例为 172.16.80.117:8088)。但我听到人们谈论提供从外部访问的入口控制器(和一些 API 网关)。我确实阅读了一些有关它们的信息,但仍然无法分辨出有什么区别!?我的集群是否需要它们?

(根据我在此处找到的已接受答案

With the Ingress Controller you can setup a domain name which maps to your pod; you don't need to give your Service the LoadBalancer type if you use an Ingress Controller.

我的集群也是一个自定义的 K8s 集群,使用 kubeadm。如果我不需要使用域名,只需通过 externalip 和端口直接解决我的服务,那么我就可以完全忽略入口控制器。我说的对吗?

谢谢!

根据 Kubernetes 文档,这是建议。

ClusterIP: 在集群内部 IP 上公开服务。选择此值会使服务只能从集群内访问。这是默认的服务类型。

NodePort: 在静态端口(NodePort)上公开每个节点 IP 上的服务。自动创建 NodePort 服务路由到的 ClusterIP 服务。您将能够通过请求 :.

从集群外部联系 NodePort 服务

LoadBalancer: 使用云提供商的负载均衡器在外部公开服务。自动创建外部负载均衡器路由到的 NodePort 和 ClusterIP 服务

最后,Ingress 控制器 帮助您通过 Ingress 配置不同的域或服务,而不是使用有点贵的 LoadBalancer,尤其是当您使用云服务托管时 有关 Ingress controller 的更多详细信息,请参阅 Kubernetes 文档

欢迎来到社区。

简答:

此时你的问题的答案是肯定的,对于简单的情况你可以完全忽略ingress。到生产的时候,这将是一个不错的选择。


更多细节:

您可能需要查看 ingress 的要点是因为它管理传入流量:适用于 HTTP/HTTPS 请求,提供基于路径的路由,可以适用于 TLS/SSL 和可以执行 TLS termination 等等。

有不同的入口可用,最常见的是 nginx ingress。它几乎具有常规 nginx 的所有功能。你可以找到 nginx ingress annotations 看看它能做什么。

例如,如果您有微服务应用程序,则每个服务都需要单独的负载均衡器,而所有内容都可以定向到单个入口并进一步路由到服务(请参阅有用链接中的示例)。

如果你只玩kubernetes和单一服务,甚至不需要负载均衡器,你可以使用nodePortexternalIP

同样部署了 ingress,无需指定端口。通常ingress分别收听80443

我认为值得尝试看看它是如何工作的,并使路由和管理服务更清洁。


有用链接: