Kubernetes --(k8s) service

service

  • Kubernete Service 是一个定义了一组Pod的策略的抽象,咱们也有时候叫作宏观服务。这些被服务标记的Pod都是(通常)经过label Selector决定的node

  • 对于Kubernete原生的应用,Kubernete提供了一个简单的Endpoints API,这个Endpoints api的做用就是当一个服务中的pod发生变化时,Endpoints API随之变化,对于哪些不是原生的程序,Kubernetes提供了一个基于虚拟IP的网桥的服务,这个服务会将请求转发到对应的后台podnginx


实验

第一步:编写部署nginx-svc的yml文件web

╭─root@node1 ~  
╰─➤  vim nginx-svc.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
   name: nginx1
spec:
   replicas: 2
   template:
      metadata:
         labels:
           name: web # 标签 service  
      spec:
         containers:
         - name: nginx
           image: nginx
           ports:
           - containerPort: 80 # 暴露在pod的ip上的端口
---
apiVersion: v1
kind: Service
metadata:
   name: my-svc  
spec:
   selector:
      name: web  # 标签 labels
   ports:
   - port: 80 # service暴露的端口
     targetPort: 80  # pods的端口

第二步:运行yml文件vim

╭─root@node1 ~  
╰─➤  kubectl apply -f nginx-svc.yml

第三步:查看标签api

╭─root@node1 ~  
╰─➤  kubectl get po -o wide --show-labels
NAME                      READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES   LABELS
nginx1-7f56c7b7f8-qxqbg   1/1     Running   0          2m33s   10.244.1.6    node2   <none>           <none>            name=web,pod-template-hash=7f56c7b7f8
nginx1-7f56c7b7f8-zjt9m   1/1     Running   0          2m33s   10.244.2.11   node3   <none>           <none>            name=web,pod-template-hash=7f56c7b7f8

指定namespace

查看namespaceapp

╭─root@node1 ~  
╰─➤  kubectl get namespace
NAME              STATUS   AGE
default           Active   2d19h
kube-node-lease   Active   2d19h
kube-public       Active   2d19h
kube-system       Active   2d19h

编辑yml文件ide

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
   name: nginx1
   namespace: kube-system  # 指定namespace
spec:
   replicas: 2
   template:
      metadata:
         labels:
           name: web
      spec:
         containers:
         - name: nginx
           image: nginx
           ports:
           - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
   name: my-svc
   namespace: kube-system  # 指定namespace
spec:
   selector:
      name: web
   ports:
   - port: 80

其中:spa

  1. 经过DNS名称访问,只能在同一名称空间
  2. 若是不是同一名称空间,须要指定namespace

外网访问

第一步:修改yml文件code

kind: Deployment
metadata:
   name: nginx1
spec:
   replicas: 2
   template:
      metadata:
         labels:
           name: web
      spec:
         containers:
         - name: nginx
           image: nginx
           ports:
           - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
   name: my-svc
spec:
   type: NodePort    # 选择service端口暴露方式
   selector:
      name: web
   ports:
   - port: 80
     targetPort: 80
     nodePort: 30007   #  端口选择范围 30000-32767

第二步:执行yml文件blog

╭─root@node1 ~  
╰─➤  kubectl apply -f nginx-svc.yml

第三步:查看svc

╭─root@node1 ~  
╰─➤  kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        2d19h
my-svc       NodePort    10.109.183.148   <none>        80:30007/TCP   9s

第四步:查看主机端口

╭─root@node1 ~  
╰─➤  ss -ntl |grep 30007
LISTEN     0      128         :::30007                   :::*

service暴露端口的四种方式:

  1. clusterIP
  2. NodePort
  3. LoadBalance
  4. ExternalName

相关文章
相关标签/搜索