k8s Server
1.k8s Server yaml文件编写格式说明:
kind: Service #类型为service apiVersion: v1 #service API版本, service.apiVersion metadata: #定义service元数据,service.metadata labels: #自定义标签,service.metadata.labels app: linux36-nginx-service-labels #定义service标签的内容 name: linux36-nginx-service #定义service的名称(kubectl get service),此名称会被DNS解析,(Nginx 实现动静分离: proxy_pass http://magedu-tomcat-service.svc.zzhz.local) namespace: linux36 #该service隶属于的namespaces名称,即把service创建到哪个namespace里面 spec: #定义service的详细信息,service.spec type: NodePort #service的类型,定义服务的访问方式,默认为ClusterIP. 在宿主机开启的端口。 (ExternalName, ClusterIP, NodePort, LoadBalancer) ports: #定义访问端口, service.spec.ports - name: http #定义一个端口名称 port: 80 #service 80端口。 protocol: TCP #协议类型 targetPort: 80 #目标pod的端口,此值也可以写template: spec: containers: ports:containerPort:name的值。如http nodePort: 30001 #node节点暴露端口 - name: https #SSL 端口 port: 443 #service 443端口 protocol: TCP #端口协议 targetPort: 443 #目标pod端口 nodePort: 30043 #node节点暴露的SSL端口 selector: #service的标签选择器,定义要访问的目标pod app: linux36-nginx-selector #将流量路到选择的pod上,须等于Deployment.spec.selector.matchLabels
Service 一般常用的有两种: • k8s集群内(ClusterIP网络类型)的service:selector指定pod,自动创建Endpoints,(申明是不带nodePort,用于数据库,redis都是对内的)。 • k8s集群外(NodePort网络类型)的service:手动创建Endpoints,指定外部服务的ip,端口和协议 service的网络类型: ExternalName: ClusterIP:ClusterIP 服务是 Kubernetes 的默认服务,k8s内部访问,集群外部无法访问它,pod与pod是经过service访问,而不是IP。 NodePort:k8s内外部可以访问,外网通过nodePort到service到pod. LoadBalancer: 同一个namespace的下service name(不管是否相同)可以使用短名通信 . 不同namespace的下相同service name,也ping不通service name ,不同namespace 的service使用全名通信。 kube-proxy和service的关系: kube-proxy监听着k8s-apiserver,一旦service资源发生变化(调k8s-api修改service信息),kube-proxy就会生成对应的负载调度的调整, 这样就保证service的最新状态。 kube-proxy有三种调度模型: 1.userspace:k8s 1.1之前 2.iptables:k8s1.10之前 3.ipvs:k8s 1.11之后,如果没有开启ipvs,则自动降级为iptables