028--kubernetes使用sevice

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、观察对比可以看见,在暴露的端口后面跟着一个端口
-2、pod还是上一个步骤创建的pod,并没有发生任何改变

-3、也就是说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有没有写正确

你可能感兴趣的:(028--kubernetes使用sevice)