美文网首页
Kubernetes学习笔记--Service

Kubernetes学习笔记--Service

作者: 木子一酱 | 来源:发表于2020-10-30 15:18 被阅读0次

    Kubernetes 中的服务(Service)是将运行在一组上的应用程序公开为网络服务的抽象方法。Service 使从属 Pod 之间的松耦合成为可能。 和其他 Kubernetes 对象一样, Service 用 YAML (更推荐) 或者 JSON 来定义. Service 下的一组 Pod 通常由 LabelSelector 来标记。

    定义Service, 例如,假定有一组 Pod,它们对外暴露了 9376 端口,同时还被打上 app=MyApp 标签。:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
    

    Service 匹配一组 Pod 是使用 标签(Label)和选择器(Selector),对 Kubernetes 中的对象进行逻辑分组。标签(Label)是附加在对象上的键/值对,可以以多种方式:

    • 指定用于开发,测试和生产的对象
    • 嵌入版本标签
    • 使用 Label 将对象进行分类
    image.png image2.png

    尽管每个 Pod 都有一个唯一的 IP 地址,但是如果没有 Service ,这些 IP 不会暴露在群集外部。Service 允许您的应用程序接收流量。Service 也可以用在 ServiceSpec 标记type的方式暴露:

    • ClusterIP (默认) - 在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问。
    • NodePort - 使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用<NodeIP>:<NodePort> 从集群外部访问 Service。是 ClusterIP 的超集。
    • LoadBalancer - 在当前云中创建一个外部负载均衡器(如果支持的话),并为 Service 分配一个固定的外部IP。是 NodePort 的超集。
    • ExternalName - 通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的externalName指定)公开 Service。不使用代理。这种类型需要kube-dns的v1.7或更高版本。

    使用 Service 连接到应用,在集群中暴露 Pod方法:

    1. 创建一个 Nginx Pod
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-nginx
    spec:
      selector:
        matchLabels:
          run: my-nginx
      replicas: 2
      template:
        metadata:
          labels:
            run: my-nginx
        spec:
          containers:
          - name: my-nginx
            image: nginx
            ports:
            - containerPort: 80
    
    
    kubectl apply -f ./run-my-nginx.yaml
    kubectl get pods -l run=my-nginx -o wide
    
    1. 使用 kubectl expose 命令为 Nginx 副本创建一个 Service:
    kubectl expose deployment/my-nginx
    
    

    这等价于使用 kubectl create -f 命令创建,对应如下的 yaml 文件:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-nginx
      labels:
        run: my-nginx
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        run: my-nginx
    

    查看service资源

    kubectl get svc my-nginx
    
    

    访问 Service方法:
    Kubernetes支持两种查找服务的主要模式: 环境变量和DNS。 前者开箱即用,而后者则需要CoreDNS集群插件

    • 环境变量方式:当 Pod 在 Node 上运行时,kubelet 会为每个活跃的 Service 添加一组环境变量
    • DNS方式: Kubernetes 提供了一个 DNS 插件 Service,它使用 skydns 自动为其它 Service 指派 DNS 名字。 如果它在集群中处于运行状态,可以通过如下命令来检查:
    kubectl get services kube-dns --namespace=kube-system
    

    相关文章

      网友评论

          本文标题:Kubernetes学习笔记--Service

          本文链接:https://www.haomeiwen.com/subject/wlucmktx.html