[K8S] 05 - Service

Ref: 37 kubernetes极速入门 k8s集群核心概念 Service Service介绍

[是什么,以及作用]

在这里,Service是一个规则。

  • 不是实体服务。
  • 只是一条 iptables 或 ipvs 的转发规则。

---- 要通过 Service 访问 Pod,通过pod标签与pod关联。

 

 

 

基本概念


Service 类型

  • ClusterIP

Cluster内部分配一个虚拟IP。也是默认创建时的类型。

  • NodePort

Cluster外访问cluster内部的node,可以通过端口访问作为入口。

  • LoadBalancer

工作在特定的Cloud Provider上。

  • ExternalName

Cluster内部的pod与cluster外部的服务进行通信。

  

Service 参数

 

 

 

 

创建一个 Service (ClusterIP)


Ref: 38 kubernetes极速入门 k8s集群核心概念 Service 通过命令行创建Service

控制器 --> App --> Pod --> Service

 

开始创建

命令行创建

  • 第一步,创建 Deployment类型App,验证创建结果
$ kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1
$ kubectl get deployment.apps

同时,可以直接访问pod,但不建议。

 

  • 第二步,创建 Service 与上述应用关联

访问 Service 以实现访问Pod目的。

$ kubectl expose deployment.apps nginx-app1 --type=ClusterIP --target-port=80 --port=80

查看expose的 IP 与 Port。Service 与 Pod 之间建立起来了关联关系。

    • Endpoint

查看这种“关联关系”,如下可见,endpoints 与 pod 的 IP地址一致。

    • 三层地址IP

Ref: k8s-集群里的三种IP(NodeIP、PodIP、ClusterIP)

Kubernetes集群里有三种IP地址,分别如下:

1) Node IP:Node节点的IP地址,即物理网卡的IP地址。

2) Pod IP:Pod的IP地址,即docker容器的IP地址,此为虚拟IP地址。

3) Cluster IP:Service的IP地址,此为虚拟IP地址。

 

资源文件创建

  • 第一步,控制器类型的应用

--- 连字符,用于资源的分割;

--- 
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: nginx-app2
spec:
  replicas: 2        # <---- 有两份,到底访问到哪里呢,通过创建 service 来控制
  selector: 
    matchLabels:
      apps: nginx
  template:
    metadata: 
      labels:
        apps: nginx
    spec:
      containers:
      - name: nginxapp2
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

为访问Pod创建一个Service,还是通过连字符在同一个文件中分开。

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app2-svc
spec:
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    apps: nginx

通过“标签”与pod关联起来。可见,这里有两个containers,因为 replicas=2。

 

  • 第二步,执行。

 

 

Service 的负载均衡

查看pods,存在两个副本,自动支持负载均衡;做实验,修改下网页的内容。

可见,多requests后,看到不同的response from two different conntainers。

实验:访问,打印出自己是哪个Pod。

  

 

 

 

创建一个 Service (NodePort)


Ref: 40 kubernetes极速入门 k8s集群核心概念 Service 通过资源清单文件创建Service NodePort

在之前的基础上,修改 service type。

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app3-svc
spec:
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
nodePort: 3001 # 该字段用于自定义port
  selector:    apps: app3

 

 

 

 

删除一个 Service


Ref: 41 kubernetes极速入门 k8s集群核心概念 Service 删除Service及学习总结

可通过命令行或者资源文件删除。

 

 End.

posted @ 2021-11-23 14:12  郝壹贰叁  阅读(37)  评论(0编辑  收藏  举报