028--kubernetes使用sevice
2018-11-25 本文已影响6人
糖纸疯了
1、目的:使用nginx作为微服务尝试service的四种类型
- clusterip
- nodePort
- loadBalance
- externalName
2、前置环境准备(将k8s加入到环境变量中)
find / -name kubectl
打印:/app/k8s/bin/kubectl
vim /etc/environment
export PATH="/app/k8s/bin/:$PATH"
source /etc/environment
3、使用clusterip类型
- 3.1、创建deployment使用类型
vi nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.12.2
ports:
- containerPort: 80
-
3.2、启动deployment
kubectl create -f nginx-deployment.yaml -
3.3、查看deployment和pod状态
kubectl get deployment|grep nginx
kubectl get pod|grep nginx
- 3.4、创建service
vi nginx-eip-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- name: http
port: 8000
protocol: TCP
targetPort: 80
- name: https
port: 8443
protocol: TCP
targetPort: 443
- 3.5、查看service
-3.6、clusterip总结:(两种访问pod的方式)
注意:
- 1、创建service没有加type:默认是clusterip类型
- 2、service的clusterip可以使用,使用方式serviceClusterIP:port(其他方式都不行),所有的节点都可以通过访问serviceClusterIP:port进行访问服务
- 3、pod的clusterip进行访问,使用方式podClusterIP:targetport,但是每个节点只能使用自己节点的podClusterIP访问自己的pod
- 4、port使用猜测:port是多个Node节点给service提供统一访问端口,(作用中等,用户无感知,在集群中使用,serviceClusterIP:port)
- 5、targetPort使用猜想:targetPort是pod的暴露端口,但不是pod对应image生成container内部真实启动服务的端口(作用最小,可以随便定义,也可以让系统自己生成)(pod端口不是container,一个pod中可能会有多个container)
- 6、创建的pod名称和deployment的metadata-->name: nginx-deployment是一样的(后面跟上后缀)
- 7、pod的名称就是和deployment的metadata-->name: nginx-deployment是一样的,即使在deploy的template-->metadata添加name描述,还是一样的结果
4、使用nodetype类型
4.1、第一种类型创建:直接在yaml中标记是nodePort
apiVersion: v1
kind: Service
metadata:
name: nginx-service-nodeport
spec:
selector:
app: nginx
ports:
- name: http
port: 8000
protocol: TCP
targetPort: 80
- name: https
port: 8443
protocol: TCP
targetPort: 443
type: NodePort
4.1、查询service进行比较
-1、观察对比可以看见,在暴露的端口后面跟着一个端口
-3、也就是说pod的访问方式还是可以进行的
-2、pod还是上一个步骤创建的pod,并没有发生任何改变
-4、那么创建的service如果进行访问?
- service的clusterip可以使用,使用方式serviceClusterIP:port(其他方式都不行),所有的节点都可以通过访问serviceClusterIP:port进行访问服务
- pod的clusterip进行访问,使用方式podClusterIP:targetport,但是每个节点只能使用自己节点的podClusterIP访问自己的pod
- node的ip进行访问,使用方式nodeIP:nodePort(如果nodePort没有指定,创建service会自动生成一个)
4.2、使用错误说明:
- 如果pod在running,但是服务不能访问,就查看一下service的pod有没有写正确