K8S当中的Service一共有四种:ExternalName、ClusterIP、NodePort和LoadBalancer。
1. ExternalName类型的Service
K8S当中,ExternalName类型的Service,用于将外部一个IP(或者域名),引入到K8S集群当中,实现K8S集群当中可以通过K8S的内部域名进行访问,后续如果需要Service的外部IP,只需要修改Service即可,不再需要各个应用当中分别进行修改。
比如我定义了一个MySQL的Service,将10.0.0.166这个IP引用到K8S集群当中。
apiVersion: v1
kind: Service
metadata:
namespace: mysql
name: mysql-service
spec:
type: ExternalName
externalName: 10.0.0.166 # 可以是固定的 IP 地址或外部 DNS 名称
接着我们只需要访问mysql-service.mysql.svc.cluster.local
的方式去访问这个MySQL集群,如果后续需要更换MySQL集群,那么只需要将IP修改一下即可。
2.ClusterIP类型的Service
参考如下的配置:
apiVersion: v1
kind: Service
metadata:
name: mysql-service
namespace: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
clusterIP: 10.233.3.17
clusterIPs:
- 10.233.3.17
type: ClusterIP
我们使用标签选择器选择有mysql标签的Pod的IP,将它抓取到Endpoint当中,并通过ClusterIP,也就是集群的内部IP(10.233.3.17
)去访问这个MySQL集群。
3. NodePort类型的Service
NodePort类型的Service使用方式如下:
apiVersion: v1
kind: Service
metadata:
name: mysql-service
namespace: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
nodePort: 31006
name: mysql
type: NodePort
通过nodePort配置当前的MySQL需要在Node的哪个端口进行启动,如果不指定nodePort的话,那么默认会是从30000-32767之间进行随机分配制。
评论