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

3
我是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网关)。我稍微阅读了一下,但仍然无法确定它们之间的区别!?我的集群是否需要它们?
根据我在这里找到的被接受的答案Kubernetes service external ip pending 通过Ingress Controller,您可以设置映射到您的Pod的域名;如果您使用Ingress Controller,则不需要将Service设置为LoadBalancer类型。
我的集群也是自定义的K8s集群,使用kubeadm。如果我不需要使用域名,只需直接通过externalip和端口寻址我的服务,那么我完全可以忽略入口控制器。我是正确的吗?
谢谢!
2个回答

3
欢迎加入社区。
简短回答:
目前来看,对于简单的情况,您可以完全忽略入口。当准备进入生产阶段时,这将是一个不错的选择。
更详细一些:
需要关注 ingress 的主要原因是它可以管理传入的流量:处理 HTTP/HTTPS 请求,基于路径进行路由,可以使用 TLS/SSL 并执行 TLS 终止 等操作。
有不同的 ingress 可用,最常见的是 nginx ingress。它几乎具有常规 nginx 的所有功能。您可以查找 nginx ingress 注释 以了解它的功能。
例如,如果您有微服务应用程序,则需要为每个服务单独使用负载均衡器,而可以将所有内容定向到单个 ingress 并进一步路由到服务(请参见有用链接中的示例)。
如果您只是在使用 Kubernetes 和单个服务,则无需甚至拥有负载均衡器,您可以使用 nodePortexternalIP
同时,如果部署了ingress,则无需指定端口。通常,ingress分别监听80443端口。

我认为值得尝试一下,以了解其工作原理,并使路由和服务管理更加清晰。


有用的链接:

0
根据 Kubernetes 文档,这是推荐的做法。
ClusterIP:在集群内部 IP 上公开服务。选择此值将使服务仅能从集群内可访问。这是默认的 ServiceType。
NodePort:在每个节点的 IP 上以静态端口(NodePort)公开服务。自动创建一个 ClusterIP 服务,用于路由到 NodePort 服务。您将能够通过请求 : 从集群外联系 NodePort 服务。
LoadBalancer:使用云提供商的负载均衡器外部公开服务。自动创建 NodePort 和 ClusterIP 服务,用于路由到外部负载均衡器。
最后,Ingress 控制器可以帮助您通过 Ingress 配置不同的域或服务,而不是使用负载均衡器,后者在使用云服务时可能有点昂贵。 有关 Ingress 控制器的详细信息描述在 Kubernetes 文档中 Ingress controller

我在最初的问题中忽略了ClusterIP字段,所以我进行了编辑。 文档表明,就像你说的那样,ClusterIP使服务仅从集群内可访问,但是服务可以通过externalIP而不是ClusterIP访问,这就是我所做的。因此,这还没有回答我的问题。 - Left Click

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接