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
posted @ 2022-05-04 15:12  老实人张彡  阅读(54)  评论(0编辑  收藏  举报