Service发现2

26 篇文章 0 订阅

主要内容

  1. ClusterIP 类型的Service
  2. NodePort 类型的Service
  3. Headless 类型的Service

一.ClusterIP 类型的Service

ClusterIP 类型服务发现通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。这也是默认的 ServiceType。

ClusterIP是Kubernetes中一种常见的Service类型,它为后端Pod提供了一个稳定的虚拟IP地址。ClusterIP类型的Service只能在集群内部访问,外部无法直接访问。

ClusterIP的主要特点和用法如下:

  1. 访问方式:ClusterIP类型的Service使用集群内部的虚拟IP地址来提供访问,可以通过该IP地址和Service的端口来访问后端Pod。集群内的其他应用或服务可以使用该IP地址来发现和访问Service。

  2. 服务发现:通过Service的虚拟IP地址,其他应用或服务可以方便地发现和访问后端Pod。可以通过Service的DNS名称来访问Service,格式为<service-name>.<namespace>.svc.cluster.local

  3. 负载均衡:ClusterIP类型的Service会将流量均匀地分发到后端Pod,实现负载均衡。当有多个Pod时,Service会根据Pod的标签选择器来选择后端Pod。

  4. 会话保持:ClusterIP类型的Service默认不支持会话保持,每个请求都会被分发到不同的后端Pod。如果需要会话保持,可以设置Service的Session Affinity为ClientIP,将同一会话的请求路由到同一个后端Pod。

  5. 网络策略:ClusterIP类型的Service默认允许集群内的所有IP访问,可以通过设置Service的访问控制策略来限制访问。可以设置spec.ipBlocks字段来指定允许访问的IP范围。

  6. 创建和使用:可以通过YAML文件或命令行创建ClusterIP类型的Service。在YAML文件中,需要指定Service的名称、标签选择器用于选择后端Pod、服务端口和协议等信息。可以使用kubectl get services命令查看Service的详细信息。

  7. 更新和删除:可以通过修改或删除Service的YAML文件,或使用kubectl editkubectl delete命令来更新和删除ClusterIP类型的Service。

总结来说,ClusterIP类型的Service为后端Pod提供了一个稳定的虚拟IP地址,可以通过该IP地址和Service的端口在集群内部访问后端Pod。ClusterIP提供了服务发现、负载均衡和网络策略等功能,适用于集群内部的应用和服务。

1.创建服务,对外提供 8000 端口,并把流量引流到具有 app: nginx 的后端 80 端口上

代码如下(示例):
cat > clusterip.yml <<EOF
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 8000
      targetPort: 80
EOF
kubectl create -f clusterip.yml
kubectl get service

在这里插入图片描述

curl http://10.106.107.20:8000

在这里插入图片描述

kubectl delete -f clusterip.yml

在这里插入图片描述

2.解释

让我来解释每一句命令的含义:

  1. cat > clusterip.yml <<EOF:这是一个shell命令,用于创建一个名为clusterip.yml的文件,并将后续输入的内容写入该文件。

  2. apiVersion: v1:指定使用的Kubernetes API版本。

  3. kind: Service:定义创建的资源类型为Service。

  4. metadata:定义Service的元数据,包括名称。

  5. spec:定义Service的规格。

  6. selector:定义用于选择Pod的标签选择器,这里选择具有app: nginx标签的Pod。

  7. ports:定义Service监听的端口。

  8. protocol: TCP:指定端口使用的协议为TCP。

  9. port: 8000:指定Service监听的端口号为8000。

  10. targetPort: 80:指定将流量转发到Pod的哪个端口,这里将流量转发到Pod的80端口。

  11. kubectl create -f clusterip.yml:使用kubectl命令创建一个ClusterIP类型的Service,根据提供的YAML文件进行配置。

  12. kubectl get service:使用kubectl命令查看Service的信息,包括名称、类型、端口等。

  13. curl http://10.106.107.20:8000:使用curl命令发送HTTP请求,访问Service的ClusterIP和端口,以测试是否能够成功访问到Service。

  14. kubectl delete -f clusterip.yml:使用kubectl命令删除通过YAML文件创建的Service,将其从集群中移除。

这些命令的组合操作的目的是创建一个名为my-service的ClusterIP类型的Service,将其绑定到具有app: nginx标签的Pod,并通过curl命令测试访问该Service。最后,通过删除Service将其从集群中移除。
在这里插入图片描述


二.NodePort 类型的 Service

NodePort 类型服务发现通过每个节点上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到自动创建的 ClusterIP 服务,通过请求<节点 IP>:<节点端口>,就可以从集群的外部访问一个 NodePort 服务。

NodePort是Kubernetes中一种常见的Service类型,它为后端Pod提供了一个固定的端口,并将该端口映射到每个节点上。NodePort类型的Service可以通过节点的IP地址和映射的端口来访问后端Pod。

NodePort的主要特点和用法如下:

  1. 访问方式:NodePort类型的Service使用每个节点的IP地址和映射的端口来提供访问。可以通过任何节点的IP地址和映射的端口来访问后端Pod。

  2. 服务发现:可以通过任何节点的IP地址和映射的端口来访问NodePort类型的Service。可以使用<node-ip>:<node-port>的格式来访问Service。

  3. 负载均衡:NodePort类型的Service会将流量均匀地分发到后端Pod,实现负载均衡。当有多个Pod时,Service会根据Pod的标签选择器来选择后端Pod。

  4. 会话保持:NodePort类型的Service默认不支持会话保持,每个请求都会被分发到不同的后端Pod。如果需要会话保持,可以设置Service的Session Affinity为ClientIP,将同一会话的请求路由到同一个后端Pod。

  5. 网络策略:NodePort类型的Service默认允许从任何IP访问,可以通过设置Service的访问控制策略来限制访问。可以设置spec.ipBlocks字段来指定允许访问的IP范围。

  6. 创建和使用:可以通过YAML文件或命令行创建NodePort类型的Service。在YAML文件中,需要指定Service的名称、标签选择器用于选择后端Pod、服务端口和目标端口等信息。可以使用kubectl get services命令查看Service的详细信息。

  7. 更新和删除:可以通过修改或删除Service的YAML文件,或使用kubectl editkubectl delete命令来更新和删除NodePort类型的Service。

总结来说,NodePort类型的Service为后端Pod提供了一个固定的端口,并将该端口映射到每个节点上。可以通过任何节点的IP地址和映射的端口来访问后端Pod。NodePort提供了服务发现、负载均衡和网络策略等功能,适用于需要从集群外部访问的应用和服务。

1.NodePort 会在节点的特定端口上开通服务,本实验中,我们指定的端口为 31788

代码如下(示例):
cat > nodeport.yml <<EOF
apiVersion: v1
kind: Service
metadata:
  name: nodeservice
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 8000
      targetPort: 80
      nodePort: 31788
EOF
kubectl create -f nodeport.yml
kubectl get service

在这里插入图片描述

curl http://192.168.30.130:31788

在这里插入图片描述

2.解释

让我来解释每一句命令的含义:

  1. cat > nodeport.yml <<EOF:这是一个shell命令,用于创建一个名为nodeport.yml的文件,并将后续输入的内容写入该文件。

  2. apiVersion: v1:指定使用的Kubernetes API版本。

  3. kind: Service:定义创建的资源类型为Service。

  4. metadata:定义Service的元数据,包括名称。

  5. spec:定义Service的规格。

  6. type: NodePort:指定Service的类型为NodePort,即通过节点的IP和随机端口访问Service。

  7. selector:定义用于选择Pod的标签选择器,这里选择具有app: nginx标签的Pod。

  8. ports:定义Service监听的端口。

  9. protocol: TCP:指定端口使用的协议为TCP。

  10. port: 8000:指定Service监听的端口号为8000。

  11. targetPort: 80:指定将流量转发到Pod的哪个端口,这里将流量转发到Pod的80端口。

  12. nodePort: 31788:指定Service在节点上暴露的端口号为31788。

  13. kubectl create -f nodeport.yml:使用kubectl命令创建一个NodePort类型的Service,根据提供的YAML文件进行配置。

  14. kubectl get service:使用kubectl命令查看Service的信息,包括名称、类型、端口等。

  15. curl http://192.168.30.130:31788:使用curl命令发送HTTP请求,访问Service的节点IP和暴露的端口号,以测试是否能够成功访问到Service。

这些命令的组合操作的目的是创建一个名为nodeservice的NodePort类型的Service,将其绑定到具有app: nginx标签的Pod,并通过curl命令测试访问该Service。
在这里插入图片描述


三.Headless 类型的 Service

Headless类型的Service是Kubernetes中一种特殊的Service类型,它不会为后端Pod提供一个稳定的虚拟IP地址,而是直接将DNS解析的责任交给后端Pod。这意味着每个后端Pod都会被分配一个唯一的DNS名称,并且可以通过该名称直接访问后端Pod。

Headless类型的Service的主要特点和用法如下:

  1. DNS解析:Headless类型的Service不会为后端Pod提供一个虚拟IP地址,而是通过DNS解析为每个后端Pod分配一个唯一的DNS名称。可以通过该名称直接访问后端Pod。

  2. 服务发现:可以通过后端Pod的DNS名称来访问Headless类型的Service。每个后端Pod都有一个唯一的DNS名称,可以使用<pod-name>.<service-name>.<namespace>.svc.cluster.local的格式来访问Pod。

  3. 负载均衡:Headless类型的Service不会提供负载均衡功能,每个后端Pod都是直接可访问的。如果有多个后端Pod,可以使用DNS轮询来实现简单的负载均衡。

  4. 会话保持:Headless类型的Service默认不支持会话保持,每个请求都会被分发到不同的后端Pod。如果需要会话保持,可以在后端Pod中实现自己的会话保持机制。

  5. 网络策略:Headless类型的Service默认允许集群内的所有IP访问,可以通过设置Service的访问控制策略来限制访问。可以设置spec.ipBlocks字段来指定允许访问的IP范围。

  6. 创建和使用:可以通过YAML文件或命令行创建Headless类型的Service。在YAML文件中,需要指定Service的名称、标签选择器用于选择后端Pod等信息。可以使用kubectl get services命令查看Service的详细信息。

  7. 更新和删除:可以通过修改或删除Service的YAML文件,或使用kubectl editkubectl delete命令来更新和删除Headless类型的Service。

总结来说,Headless类型的Service不会为后端Pod提供一个虚拟IP地址,而是通过DNS解析为每个后端Pod分配一个唯一的DNS名称。可以通过该名称直接访问后端Pod。Headless类型的Service适用于需要直接访问后端Pod的场景,例如数据库集群或分布式系统。

1.在此类型的 Service 中,将不会只返回 Service IP,而是直接返回众多 Pod 的 IP 地址,所以需要进入 pod 中用集群内 DNS进行测试

代码如下(示例):
cat > headless.yml <<EOF
apiVersion: v1
kind: Service
metadata:
  name: headless
spec:
  clusterIP: None
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 8000
      targetPort: 80
EOF
kubectl create -f headless.yml
kubectl get service

在这里插入图片描述

kubectl run --rm --image=docker.io/busybox:1.28 -it testpod

在这里插入图片描述

kubectl delete -f headless.yml
kubectl delete deployments.apps nginx-deployment-servicetest

在这里插入图片描述

2.解释

让我来解释每一句命令的含义:

  1. cat > headless.yml <<EOF:这是一个shell命令,用于创建一个名为headless.yml的文件,并将后续输入的内容写入该文件。

  2. apiVersion: v1:指定使用的Kubernetes API版本。

  3. kind: Service:定义创建的资源类型为Service。

  4. metadata:定义Service的元数据,包括名称。

  5. spec:定义Service的规格。

  6. clusterIP: None:指定Service的ClusterIP为None,将其设置为无头(Service)类型。

  7. selector:定义用于选择Pod的标签选择器,这里选择具有app: nginx标签的Pod。

  8. ports:定义Service监听的端口。

  9. protocol: TCP:指定端口使用的协议为TCP。

  10. port: 8000:指定Service监听的端口号为8000。

  11. targetPort: 80:指定将流量转发到Pod的哪个端口,这里将流量转发到Pod的80端口。

  12. kubectl create -f headless.yml:使用kubectl命令创建一个无头(Service)类型的Service,根据提供的YAML文件进行配置。

  13. kubectl get service:使用kubectl命令查看Service的信息,包括名称、类型、端口等。

  14. kubectl run --rm --image=docker.io/busybox:1.28 -it testpod:使用kubectl命令创建一个名为testpod的临时Pod,使用Busybox镜像,并进入该Pod的交互式终端。

  15. kubectl delete -f headless.yml:使用kubectl命令删除通过YAML文件创建的Service,将其从集群中移除。

  16. kubectl delete deployments.apps nginx-deployment-servicetest:使用kubectl命令删除名为nginx-deployment-servicetest的Deployment,将其从集群中移除。

这些命令的组合操作的目的是创建一个名为headless的无头(Service)类型的Service,将其绑定到具有app: nginx标签的Pod,并通过kubectl命令创建一个临时Pod进行测试。最后,通过删除Service和Deployment将它们从集群中移除。

在这里插入图片描述


总结

以上是今天要讲的内容,学到了ClusterIP 类型Service;NodePort 类型的Service;Headless 类型的Service。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Juno Service Release 2是指用于OpenStack云计算平台的第二个Juno版本的更新和修补程序。Juno是OpenStack的一次主要版本发布,SR2是在Juno发布后的一段时间内进行的一次补丁发布。 Juno SR2旨在解决Juno版本中已经发现的漏洞和缺陷,并提供更稳定和可靠的系统性能。它通过更新和修复现有的代码来改进Juno版本,并且还可能引入一些新功能和改进。 Juno SR2的发布对于用户来说是非常重要的。首先,它修复了Juno版本中已知的问题,提高了系统的稳定性和可靠性。这意味着用户可以更好地利用OpenStack平台,无需担心已知问题的影响。 其次,Juno SR2可能引入了一些新功能和改进。这可能包括性能改进、安全性增强、用户友好的界面改进和新的功能模块。这些新增功能可以增加用户在OpenStack上的灵活性和效率,提供更多的功能选择和改进用户体验。 此外,Juno SR2还可能提供更多的兼容性和互操作性,确保OpenStack能够与其他系统和工具无缝集成,使用户能够更容易地使用和管理他们的云计算环境。 总体而言,Juno SR2是对Juno版本进行更新和改进的重要补丁发布。它通过修复现有问题、提供新功能和改进性能来提高OpenStack平台的质量和功能,使用户能够更好地利用云计算技术。对于使用OpenStack的用户来说,升级到Juno SR2是一个明智的选择,以确保他们的系统始终保持最新版本和最佳性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值