Kubernetes学习笔记--Service

2020-10-30  本文已影响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)是附加在对象上的键/值对,可以以多种方式:

image.png image2.png

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

使用 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集群插件

kubectl get services kube-dns --namespace=kube-system
上一篇 下一篇

猜你喜欢

热点阅读