您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    你知道K8S暴露效劳的方式有哪些吗?
    时间:2021-08-31 12:20 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    你知道K8S暴露效劳的方式有哪些吗?

    Kubernetes 支持多种将外部流量引入集群的方法。 ClusterIP 、 NodePort 和 Ingress 是三种广泛使用的资源,它们都在路由流量中发挥作用。每一个都允许您使用一组独特的功能和折衷方案来公开服务。

    背景

    默认情况下, Kubernetes 上运行的服务都是在自己的Pod 里过着与世隔绝的生活,外部无法打扰他们。我们可以通过创建  Service 使容器供外部世界可见,这个“外部世界” 即可以整个集群、也可以是整个互联网。

    Service 将流量路由到 Pod 内的容器中。 Service 是一种用于在网络上公开 Pod 的抽象机制。每个 Service 有一个类型—— ClusterIP 、 NodePort 或 LoadBalancer 。这些定义了外部流量如何到达服务。

    但是光有 Service 也不行 ,有时候我们需要将不同域名和URL路径上的流量路由到集群内部,这就需要 Ingress 帮助才行。

    ClusterIP

    ClusterIP 是默认的 Service 类型,不指定 Type 时默认就是 ClusterIP 类型的 Service 。 ClusterIP 在集群内提供网络连接。它通常无法从外部访问。我们将这些 ClusterIP Service 用于服务之间的内部网络。

    apiVersion: v1 

    kind: Service 

    spec: 

     metadata: 

       name: my-service 

      selector: 

        app: my-app 

      type: ClusterIP 

      ports: 

        - name: http 

          port: 80 

          targetPort: 8080 

          protocol: TCP 

    上面的示例定义了一个 ClusterIP Service 。到 ClusterIP 上端口 80 的流量将转发到你的 Pod 上的端口 8080  (targetPort配置项),携带 app: my-app 标签的 Pod 将被添加到 Service 中作为作为服务的可用端点。

    可以通过运行 kubectl get svc my-service 查看分配的 IP 地址。集群中的其他服务可以使用 10.96.0.1:80 与这个的 Service 管控的服务进行交互。

    ➜  kubectl get svc app-service 

    NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE 

    my-service        ClusterIP   10.96.0.1        <none>        8080:80/TCP       63d 

    可以使用 spec.clusterIp 字段手动将 ClusterIP 设置为特定 IP 地址:

    spec: 

      type: ClusterIP 

      clusterIp: 123.123.123.123 

    NodePort

    NodePort 在固定端口号上公开向集群外部暴露服务,它允许从集群外部访问该服务,在集群外部需要使用集群的 IP 地址和 NodePort 指定的端口才能访问。创建 NodePort Service 将在集群中的每个 Node 上开放该端口。 Kubernetes 会自动将端口流量路由到它所连接的服务。下面是一个 NodePort Service 的示例:

    apiVersion: v1 

    kind: Service 

    spec: 

     metadata: 

       name: my-service 

      selector: 

        app: my-app 

      type: NodePort 

      ports: 

        - name: http 

          port: 80 

          targetPort: 8080 

          protocol: TCP 

    NodePort 的定义与 ClusterIP Service 具有相同的属性。唯一的区别是把类型设置成了:"NodePort"。 targetPort 字段仍然是必需的,因为 NodePort 由 ClusterIP 提供支持。

    创建 NodePort Service 的同时还会自动创建一个 ClusterIP 类型的 Service , NodePort 会将端口上的流量路由给 ClusterIP 类型的 Service。

    这也就是为什么下面我们查看 NodePort Service 时发现他也是有 ClusterIP 的原因:

    ➜  kubectl get svc my-service 

    (责任编辑:admin)