kubernetes中的基本概念(十) NodePort、Lb(Service)、Ingress的使用场景
理解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是对外暴露服务的标准形式。