醋醋百科网

Good Luck To You!

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 或微服务之间的内部通信。

指定的 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,节点端口是节点端开放的端口。可以使用 <NodeIp>:<Nodeport> 从外部访问 Pod。如果有多个节点,可以暴露多个具有相同端口的IP地址。


下面给出了 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 和端口值映射。外部流量可以通过<NodeIp>:30070连接访问Pod,内部流量可以通过8085端口连接访问Pod。

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

负载均衡器

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

示例 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 层负载均衡器,这些负载均衡器使用入口对象中的定义自动配置。

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 的产品服务。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言