minikube实践练习2 - Service

Service

参考文档:https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/

1. 创建Service

Kubernetes 集群中的每个 Pod (即使是在同一个 Node 上的 Pod )都有一个唯一的 IP 地址,因此需要一种方法自动协调 Pod 之间的变更,以便应用程序保持运行。
Service 通过一组 Pod 路由通信。Service 是一种抽象,它允许 Pod 死亡并在 Kubernetes 中复制,而不会影响应用程序。在依赖的 Pod (如应用程序中的前端和后端组件)之间进行发现和路由是由Kubernetes Service 处理的。

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

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

1.1 确认服务状态正常

[weiheng@weihengminikube root]$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS      AGE
kubernetes-bootcamp-644c5687f4-l2dkm   1/1     Running   1 (31m ago)   12h
[weiheng@weihengminikube root]$ kubectl get services
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.104.41.65   <pending>     8080:32149/TCP   41h
kubernetes   ClusterIP      10.96.0.1      <none>        443/TCP          41h
[weiheng@weihengminikube root]$ 

1.2 创建service

#暴露端口给外部访问
[weiheng@weihengminikube root]$ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
service/kubernetes-bootcamp exposed
[weiheng@weihengminikube root]$ kubectl get services
NAME                  TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-node            LoadBalancer   10.104.41.65    <pending>     8080:32149/TCP   41h
kubernetes            ClusterIP      10.96.0.1       <none>        443/TCP          41h
kubernetes-bootcamp   NodePort       10.106.175.25   <none>        8080:31601/TCP   9s
[weiheng@weihengminikube root]$ kubectl describe services/kubernetes-bootcamp
Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   app=kubernetes-bootcamp
Annotations:              <none>
Selector:                 app=kubernetes-bootcamp
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.106.175.25
IPs:                      10.106.175.25
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31601/TCP
Endpoints:                10.244.0.22:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
[weiheng@weihengminikube root]$

1.3 测试集群外部访问

[weiheng@weihengminikube root]$ export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
[weiheng@weihengminikube root]$ echo "NODE_PORT=$NODE_PORT"
NODE_PORT=31601
[weiheng@weihengminikube root]$ curl http://"$(minikube ip):$NODE_PORT"
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-l2dkm | v=1
[weiheng@weihengminikube root]$

我们把集群的地址提取出来,在浏览器里访问应用 -> it’s ok
我们拿到了一个服务端的响应
在这里插入图片描述

2. 使用标签

Deployment 为 Pod自动创建了标签

#查看 label 信息 -> Labels:
kubectl describe deployment

#查看带标签的pod信息
kubectl get pods -l app=kubernetes-bootcamp

#查看带标签的service
kubectl get services -l app=kubernetes-bootcamp

#提取pod name到环境变量
export POD_NAME="$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')"
echo "Name of the Pod: $POD_NAME"

#通过 pod name 添加一个新标签
kubectl label pods "$POD_NAME" version=v1
#查看标签添加结果
kubectl describe pods "$POD_NAME"
#按新标签查新pod
kubectl get pods -l version=v1

在这里插入图片描述

3. 删除service

#按标签删除
kubectl delete service -l app=kubernetes-bootcamp
#确认是否已删除 -> NodePort 被删除掉了
kubectl get services
#确认service已移除、外部地址不能再访问
curl http://"$(minikube ip):$NODE_PORT"

#集群外不能访问,此时集群内部依然可以正常运行、可以访问
kubectl exec -ti $POD_NAME -- curl http://localhost:8080

示例:
在这里插入图片描述

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值