如何在Kubernetes中创建服务
服务是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应用程序。