如何在Kubernetes中创建服务

时间:2019-04-29 03:17:12  来源:igfitidea点击:

服务是Pods之上的抽象层。它定义了一组逻辑pod。它提供了一个IP地址和DNS名称,通过它可以访问POD。它是用来暴露吊舱的。

Kubernetes有3种不同类型的服务:

ClusterIP

它公开Kubernetes集群中的服务。只能从群集中访问此服务。无法从群集外部访问它。

NodePort

它将在已部署节点上的静态端口上公开服务。可以使用从集群外部访问此服务NodeIP:Nodeport。

Load Balancer

使用云提供商的负载平衡器对外公开服务,这将在云提供商上创建一个公共IP

ExternalName通过返回CNAME记录,将服务映射到ExternalName字段的内容

在本文中,我们将看到创建NodePort类型的服务的步骤。

准备工作

Kubernetes集群至少有一个工作节点。

创建服务

首先,我们将使用以下定义创建一个部署,服务将把所有请求重定向到该部署。

创建一个新文件并在其中添加以下内容,这将为Nginx创建一个部署。

vim my-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nginx
  replicas: 3 
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

要创建部署,请执行以下命令。

$ kubectl create -f my-deployment.yml

这将为Nginx创建一个包含3个副本的部署。

我们可以使用以下命令获取部署、复制集和pod的详细信息。

$ kubectl get deployment | grep nginx

$ kubectl get replicaset | grep nginx

$ kubectl get pod | grep nginx

现在,使用以下内容创建服务定义。

$ vim my-service.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:    

  app: nginx
  type: NodePort

上面的服务定义将创建一个NodePort类型的服务,并将请求重定向到Pod匹配标签nginx,即我们使用前面的部署创建步骤创建的pods。

执行以下命令以创建服务。

$ kubectl create -f my-service.yml

获取服务的详细信息,并检查服务将在其上可用的节点报告。

$ kubectl get service | grep nginx

$ kubectl describe service nginx

服务的端口是从可用范围中随机分配的。

现在,nginx应用程序可以通过这个服务在NodeIp:NodePort

106.200.131.23:31263

总结

在本文中,我们为Nginx创建了一个包含3个副本的部署,并创建了一个NodePort类型的服务。我们看到了如何用NodeIP:Port访问那些使用部署创建的Nginx应用程序。