k8s学习第15天

将外部服务定义为Service

普通的Service通过label selector 对后端endpoint 就行访问,如果后端服务不是pod集群,则Service 还可以抽象定义为任意其他服务,将一个k8s集群外的的服务定义为k8s内的一个service,供集群内其他应用访问,常见场景:

  1. 外部的集群:数据库、缓存服务等
  2. 其他k8s集群的某个服务

---
apiVersion: v1
kind: Service
metadata:
   name: my-service
spec:
   ports:
   - protocol: TCP
     port: 80
     targetPort: 80
---

#把外面的服务包装成一个endpoint
apiVersion: v1
kind: Endpoints
metadata:
   name: my-service
#配置外面的访问IP和端口
subsets:
- address:
  - IP: 192.168.3.4
  ports:
  - port: 80

将Service暴露到集群外部

目前Kubernetes支持以下四种类型的Service:

1.ClusterIP

ClusterIP是最基本的Service类型,为集群内部的服务提供了一个稳定的虚拟IP地址。它只能通过集群内部的其他对象访问,并且默认情况下不会将流量路由到外部。

 2.NodePort

NodePort类型的Service提供了一个静态的端口号,可以将流量路由到集群中的任何节点上。外部客户端可以使用该端口访问该Service,分配给Service的每个Pod都会监听此端口号并处理传入的请求。

3.LoadBalancer

LoadBalancer类型的Service允许将外部流量自动负载均衡到多个Pod之间,通常需要与云提供商的负载均衡器结合使用。它创建了一个公共负载均衡器,该负载均衡器将目标端点映射到已分配的公共IP地址。

4.ExternalName

ExternalName类型的Service可用于将Kubernetes服务名称映射到DNS记录中的任何名称,而无需为其创建任何额外的资源对象。这对于在Kubernetes集群外运行的服务非常有用,因为它可以使这些服务更加透明和易于访问

NodePort类型

apiVersion: v1
kind: Service
metadata:
   name: webapp-nodeport
spec:
   //nodeport类型
   type: NodePort
   ports:
   - port: 808
     targetPort: 8080
     //nodeport的端口
     nodePort: 32700
   selector:
     app: webapp
kubectl create -f nodeport.yaml 

获取本机的ip,并请求配置的node port的端口 

[root@scms01 day10]# hostname -i
172.16.2.220

[root@scms01 day10]# curl 172.16.2.220:32700

 LoadBalancer类型

在公有云环境中,设置servic类型为LoadBalancer,可以将Service映射到公有云提供的某个负载均衡器的IP地址上,客户度通过负载均衡器的IP和service的端口就可以访问到具体的服务,无须再给通过kube-proxy提高负载均衡机制进行流量转发,公有云提供的LoadBalancer可以直接讲流量转发到后端的Pod上。

apiVersion: v1
kind: Service
metadata:
    name: my-servide
spec:
   //设置为loadBalancer
   type: LoadBalancer
   selector:
       app: MyApp
   ports
   - protocol: TCP
     port: 80
     targetPort: 9376
   clusterIP: 10.0.171.239

在服务创建成功后,云服务商会在service的定义中补充loadBlancer的IP地址

Status:
    loadBalancer:
        ingress:
        - ip: 192.0.2.127

ExternalName类型

这种类型的服务用于将集群外的服务定义为k8s集群的service,并且通过该字段指定外部服务的地址,可以使用域名或IP格式。集群内的客户端应用通过访问这个service就能访问外部的服务了,这种类型的service没有后端的pod,无需设置selecor

apiVersion: v1
kind: Service
metadat:
   name: my-service
   namespace: prod
spec:
   type: ExternalName
   externalName: my.database.example.com
~                                         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值