K8s-Service
service
1、service类型
ClusterIP:通过集群内部IP地址暴露服务,但该地址仅在集群内可见,可达,无法被集群外部的客户端访问,为k8s的默认service类型
NodePort:NodePort是clusterIP的增强类型,它会与clusterIP的功能之外,在每个节点上使用一个相同的端口号将外部的流量引入改service上来。
LoadBalancer: LB是nodePort增强型,要借助于底层IAAS云服务商的LBASS来管理LoadBalancer。
ExternalName:借助集群上的kubeDNS来实现,服务的名称会被解析为一个CNAME记录,而CNAME名称会被DNS解析为外部服务的IP地址;这种Service既不会有ClusterIP,也不会有NodePort;
2、service资源定义格式,名称空间资源
apiVersion: v1
kind: Service
metadata:
name:
namespace:
spec:
type:<string> #service类型,默认为ClusterIP 10.96.0.0/12网络中动态选择;
selector <map[string]string>#等值类型标签选择器,内含”与“的逻辑
ports:#service的端口对象列表
protocol<string># 协议,支持TCP,UDP,SCTP,默认为TCP
port<integer> #Service端口号
targetPort:
nodePort:
externalTrafficPolicy <string>#外部流量策略处理方式,Local表示有当前节点处理。
3、标签
标签中的键名称有键前缀和键名组成。一般都是已自己的集群域名命名。
键值不能超过63个字符以字母与数字开头或结尾
查看标签
kubectl get pods --show-labels
自定义标签
lables定义
kubectl labels pods PODNAME name=demoapp
kubectl label pods mypod1 release=alpha
kubectl get pods --show-labels
删除
kubectl label pods mypod1 release-
标签选择器:
等值选择器:基于等值就是使用= 、==、!=
集合关系选择器:值是否在一个集合之中 key in ()、key not in ()、 key:、!key:
998 kubectl get pods -n default -l 'release in (alpha)' --show-labels
999 kubectl get pods -n default -l 'release in (alpha,canary)' --show-labels
1000 kubectl get pods -n default -l 'release in (canary)' --show-labels
1001 kubectl get pods -n default -l 'release not in (alpha)' --show-labels
1003 kubectl get pods -n default -l 'app=redis-cluster' --show-labels
3、实例
配置一个类型为clusterIP的service,手动指定clusterIP,配置标签为release:alpha加入到该service中。配置端口对为tcp的http协议,前后端端口都为80
kind: Service
apiVersion: v1
metadata:
name: alphe-env
namespace: default
spec:
clusterIP: 10.97.72.2
selector:
release: alpha
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80