kubernetes中的基本概念(十) NodePort、Lb(Service)、Ingress的使用场景

分类: AUTOMATION 发布于:

理解kubernetes的关键是理解流量的走向。

ClusterIp

Service 对象的第一种类型,service定义的默认类型。

当生命一个ClusterIP类型的service时,

apiVersion: v1
kind: Service
metadata:
    name: my-internal-service
spec:
    selector:
        app: my-app
    type: ClusterIP
    ports:
    - name: http
      port: 80    
      targetPort: 80
      protocal: TCP

只有一种方式可以访问这个clusterIP类型的service,通过代理:

kubectl proxy

访问形式如下

http://localhost:8080/api/v1/proxy/namespaces//services/:/

总结一下, clusterIP类型的service,如果在集群外访问,可以通过kubectl proxy代理的形式使用。

  • 这种类型的service通常为集群内的其他类型的service提供服务(通常通过集群内的DNS)
NodePort

NodePort类型的service会在node上监听一个端口,来自这个端口的流量(任何tcp过来的数据)转发到对应的backend。

对应的定义形式

apiVersion: v1
kind: Service
metadata:  
  name: demo-nodeport-service
spec:
  selector:    
    app: my-app
  type: NodePort
  ports:  
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30036
    protocol: TCP

流量方向

这种类型的service存在如下问题

  • 端口范围限定为 30000–32767
  • 如果node的ip地址变化,关联资源将受到影响
  • 服务被绑定了端口,如果数量巨大,需要维护大量数据。
LoadBalencer

这种类型的service是对外暴露服务的标准形式。