美文网首页
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