10-kubernetesService资源

概要

在kubernetes平台上, pod是由生命周期的。为了能给客户端提供固定的访问端点,所以在服务端(pods)和客户端之间,提供了一个中间层,此中间层称之为service。

  1. service层的域名解析严重依赖于kubernetes集群上部署的附件(CoreDNS, kube-dns)。

  2. kubernetes为了能向客户端提供网络功能,需要依赖于第三方的方案,可通过CNI标准接口进行接入。

  3. node network: 真实地址,node network配置在node资源之上。

  4. pod network: 真实地址,pod network配置在pod资源之上。

  5. cluster network: 虚拟地址

(kube-proxy监听api-server.png)[…/png/kube-proxy监听api-server.png]

Node节点中的kube-proxy进程会监听Master节点中Api-server资源变动的信息。

  1. service的工作模式: 1. userspace, iptables, ipvs
    userspace: 1.1
    iptables: 1.10
    ipvs: 1.11

    类型:
    ExternalName, ClusterIP, NodePort, and LoadBalancer

    资源记录:
    SVC_NAME_, NS_NAME, DOMAIN, LTD

    svc.cluster.local
    redis.default.svc.cluster.local.

  2. service实际并非直接连接pod, 而是连接ndports(k8s的一个对象), 然后在连接到pod.

清单1

使用清单创建service

vim redis-svc.yaml

apiVersion: v1
kind: Service
metadata:
    name: redis
    namespace: default
spec:
    selector:
        app: redis
        role: logstor
    clusterIP: 10.97.97.97
    type: ClusterIP
    ports: 
    - port: 6379        # service ip
      targetPort: 6379  # pod ip

清单2

vim myapp-svc.yaml

apiVersion: v1
kind: Service
metadata:
    name: myapp
    namespace: default
spec:
    selector:
        app: myapp
        role: canary
    clusterIP: 10.99.99.99
    type: NodePort
    ports:
        port: 80
        targetPort: 80
        NodePort: 30080

清单3

apiVersion: v1
kind: Service
metadata:
    name: myapp-svc
    namespace: default
spec:
    selector:
        app: myapp
        release: canary
    clusterIP: "None"       # 无头service
    ports:
        port: 80
        targetPort: 80
        nodePort: 30080

示例

  1. 示例1,获取svc当前的svc服务资源, kubectl get svc

  2. 示例2,创建清单1的实例, kubectl apply -f redis-svc.yaml

  3. 示例3,创建的redis服务的详细信息, kubectl describe svc redis

  4. 示例4,创建清单2的实例,kubectl apply -f myapp-svc.yaml

  5. 示例5,查看清单2的进程, while true; do curl http://172.20.0.66:30080/hostname.html; sleep 1; done

  6. 示例6, 修改myapp服务中的部分字段值, kubectl patch svc myapp -p '{"sepc" : {"sessionAffinity":"ClientIP"}}'

  7. 示例7, 查看修改的myapp中的服务, kubectl describe svc myapp

  8. 示例8, 注意对比和示例6中区别, kubectl patch svc myapp -p '{"sepc" : {"sessionAffinity":"None"}}'

  9. 示例9, 创建清单3的实例, kubectl apply -f myapp-svc

  10. 示例10, 查看运行结果, dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.10

  11. 示例11, 查看当前的服务, kubectl get svc -n kube-system

  12. 示例12, 查看pod的地址, kubectl get pods -o wide -l app=myapp

后续工作

  1. 几种服务的区别是什么?

你可能感兴趣的:(k8s,kubernetes)