Kubernetes (K8S) 的几种服务类型

Kubernetes 中的服务用于将 Pod 分组为单个端点。由于 Pod 可以重新创建,因此它们可以附加到服务以获得稳定的 IP 地址。

可以使用 yaml 文件定义服务。下面的示例为 yaml 文件的 Kubernetes 服务。yaml文件中指定的“targetport”就是容器运行所在的端口值。

apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
  selector:
    app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8085

Kubernetes 中使用了不同的服务类型。这些服务的不同之处在于它们如何在内部或外部公开 Pod 以及它们如何处理流量。

Kubernetes 服务类型

集群IP

这是使用内部 ClusterIP 公开 Pod 的默认服务。在 ClusterIP 中,服务不可用于集群的外部访问,而是用于集群中不同 Pod 或微服务之间的内部通信。

Kubernetes (K8S) 的几种服务类型

ClusterIP 暴露 Pod

指定的 TargetPort 值是容器暴露的端口值,指定的端口值是集群 ip 服务暴露的值,内部 Pod 可以使用该端口值相互通信。指定用于创建集群 IP 服务的示例 yaml 如下所示:

apiVersion: v1
kind: Service
metadata:
  name: clusterip-demo-service
spec:
  selector:
    app: myapp
  type: ClusterIp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8085

在上面的配置中,运行在Pod中的容器暴露在8085端口,ClusterIP服务端口运行在80,任何内部服务都可以连接到这个80端口来访问这个Pod。

节点端口

该服务对外暴露并允许外部流量通过节点端口连接到 Kubernetes Pod,节点端口是节点端开放的端口。可以使用 : 从外部访问 Pod。如果有多个节点,可以暴露多个具有相同端口的IP地址。

Kubernetes (K8S) 的几种服务类型

NodePort 允许外部流量连接到 Pod


下面给出了 NodePort 的示例 yaml 配置:

apiVersion: v1
kind: Service
metadata:
  name: nodeport-demo-service
spec:
  selector:
    app: myapp
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8085
      nodePort: 30070

NodePort 值是在 Node 端暴露的端口,外部流量可以连接到该端口。TargetPort 值是运行在 Pod 中的容器暴露的端口。端口值是集群内部服务可以连接的端口。

根据上述配置,在 Pod 中运行的容器暴露在端口 8085 上,该端口与 nodeport 和端口值映射。外部流量可以通过:30070连接访问Pod,内部流量可以通过8085端口连接访问Pod。

NodePort 服务的局限性在于,当节点发生变化或端口号发生变化时,客户端必须更改为新的端口或 IP 地址。

负载均衡器

在云中运行时,此服务将动态创建外部负载均衡器,如云负载均衡器。这使用网络负载均衡器(第 4 层负载均衡器)。这会为额外的负载平衡器组件产生额外的成本。此服务的优点是可以利用外部负载平衡器功能。

Kubernetes (K8S) 的几种服务类型

载均衡器将服务连接到 Pod

示例 yaml 配置如下:

apiVersion: v1
kind: Service
metadata:
  name: loadbalancer-demo-service
spec:
  selector:
    app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8085
  type: LoadBalancer

Ingress: 此服务允许根据定义的规则(如基于路径的路由)路由 HTTP(S) 流量。这可以与一个或多个服务对象相关联,其中这些服务进一步与 Pod 相关联。入口控制器创建 HTTP(S) 负载均衡器第 7 层负载均衡器,这些负载均衡器使用入口对象中的定义自动配置。

Kubernetes (K8S) 的几种服务类型

Ingress 允许基于路径的路由

Ingress 的示例 yaml 配置如下所示:

apiVersion: v1
kind: Ingress
metadata:
  name: Ingress-demo-service
spec:
  rules:
  - http:
      paths:
      - path: /customer
        backend:
          service:
            name: customerservice
            port: 
              number: 8080
      - path: /product
        backend:
          service:
            name: productservice
            port: 
              number: 8085

在上面的配置中,ingress 配置了到 /customer 路径的 http(s) 请求被发送到运行在 8080 端口的客户服务,对 /product 路径的 http(s) 请求被发送到运行在端口 8085 的产品服务。

展开阅读全文

页面更新:2024-05-19

标签:均衡器   平衡器   节点   负载   示例   集群   路由   端口   容器   路径   流量   入口   定义   类型   地址

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top