k8s里面Service中ClusterIP和NodePort的使用

1 类型
的资源清单文件:
kind: Service# 资源类型apiVersion: v1# 资源版本metadata: # 元数据name: service # 资源名称namespace: dev # 命名空间spec: # 描述selector: # 标签选择器,用于确定当前service代理哪些podapp: nginxtype: # Service类型,指定service的访问方式clusterIP:# 虚拟服务的ip地址sessionAffinity: # session亲和性,支持ClientIP、None两个选项ports: # 端口信息- protocol: TCP port: 3017# service端口targetPort: 5003 # pod端口nodePort: 31122 # 主机端口
2 使用 2.1 实验环境准备
在使用之前,首先利用创建出3个pod,注意要为pod设置app=nginx-pod的标签
创建.yaml,内容如下:
apiVersion: apps/v1kind: Deploymentmetadata:name: pc-deploymentnamespace: devspec: replicas: 3selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1ports:- containerPort: 80

k8s里面Service中ClusterIP和NodePort的使用

文章插图
[root@k8s-master01 ~]# kubectl create -f deployment.yamldeployment.apps/pc-deployment created# 查看pod详情[root@k8s-master01 ~]# kubectl get pods -n dev -o wide --show-labelsNAMEREADYSTATUSIPNODELABELSpc-deployment-66cb59b984-8p84h1/1Running10.244.1.39node1app=nginx-podpc-deployment-66cb59b984-vx8vx1/1Running10.244.2.33node2app=nginx-podpc-deployment-66cb59b984-wnncx1/1Running10.244.1.40node1app=nginx-pod# 为了方便后面的测试,修改下三台nginx的index.html页面(三台修改的IP地址不一致)# kubectl exec -it pc-deployment-66cb59b984-8p84h -n dev /bin/sh# echo "10.244.1.39" > /usr/share/nginx/html/index.html#修改完毕之后,访问测试[root@k8s-master01 ~]# curl 10.244.1.3910.244.1.39[root@k8s-master01 ~]# curl 10.244.2.3310.244.2.33[root@k8s-master01 ~]# curl 10.244.1.4010.244.1.40
【k8s里面Service中ClusterIP和NodePort的使用】2.2 类型的
创建-.yaml文件
apiVersion: v1kind: Servicemetadata:name: service-clusteripnamespace: devspec:selector:app: nginx-podclusterIP: 10.97.97.97 # service的ip地址,如果不写,默认会生成一个type: ClusterIPports:- port: 80# Service端口targetPort: 80 # pod端口
# 创建service[root@k8s-master01 ~]# kubectl create -f service-clusterip.yamlservice/service-clusterip created# 查看service[root@k8s-master01 ~]# kubectl get svc -n dev -o wideNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGESELECTORservice-clusteripClusterIP10.97.97.9780/TCP13sapp=nginx-pod# 查看service的详细信息# 在这里有一个Endpoints列表,里面就是当前service可以负载到的服务入口[root@k8s-master01 ~]# kubectl describe svc service-clusterip -n devName:service-clusteripNamespace:devLabels:Annotations:Selector:app=nginx-podType:ClusterIPIP:10.97.97.97Port:80/TCPTargetPort:80/TCPEndpoints:10.244.1.39:80,10.244.1.40:80,10.244.2.33:80Session Affinity:NoneEvents:# 查看ipvs的映射规则[root@k8s-master01 ~]# ipvsadm -LnTCP10.97.97.97:80 rr-> 10.244.1.39:80Masq100-> 10.244.1.40:80Masq100-> 10.244.2.33:80Masq100# 访问10.97.97.97:80观察效果[root@k8s-master01 ~]# curl 10.97.97.97:8010.244.2.33
2.3 类型的
在之前的样例中,创建的的ip地址只有集群内部才可以访问,如果希望将暴露给集群外部使用,那么就要使用到另外一种类型的,称为类型 。的工作原理其实就是将的端口映射到Node的一个端口上,然后就可以通过:来访问了 。
k8s里面Service中ClusterIP和NodePort的使用

文章插图
创建-.yaml
apiVersion: v1kind: Servicemetadata:name: service-nodeportnamespace: devspec:selector:app: nginx-podtype: NodePort # service类型ports:- port: 80nodePort: 30002 # 指定绑定的node的端口(默认的取值范围是:30000-32767), 如果不指定,会默认分配targetPort: 80