kubernets学习之 服务(2)

将服务暴露给外部客户端

就是外部可以访问pod上的服务,有一下几种方式可以在外部访问服务

1,将服务的类型设置成NodePort的形式。这样就会在每个集群的节点上打开一个端口,提供对外边服务的访问。

2,将服务的类型设置成LoadBalance,NodePort类型的一种扩展,这使得服务可以通过一个专用的负载均衡器来访问。这是由kubernets的云基础设施提供的。

3,创建一个Ingress资源。这是一个完全不同的机制。通过一个IP地址公开多个服务。它运行在http层。

1.1使用NodePort类型的服务

将一组pod公开给外部客户端的方法,将服务类型设置成NodePort,通过创建NodePort服务,可以让Kubernets在其所在节点上保留一个端口,并将传入的连接转发给服务部分的Pod

NodePort类型的YAML

----------------------------

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
    nodePort: 9376
  selector:
    app: MyApp

----------------------------

type: NodePort:为NodePort类型服务

 targetPort: 8080:背后Pod的目标端口号

port: 80:node的端口号

nodePort: 9376:通过集群节点的9376端口可以访问该服务。

例如:以下的形式可以访问服务

xx.xx.xx.xx(service的IP):80

xx.xx.xx.xx(1st nodeIP):9376

xx.xx.xx.xx(2nd nodeIP):9376

因为9376端口是特殊端口,得打开防火墙,一定要注意!

 

2.1通过负载均衡器将服务暴露出来

在云提供商上运行的kubernets集群通常支持从云基础架构自动提供负载均衡器。所以需要做的就是设置服务类型为LoadBalance而不是NodePort。LoadBalancer有自己的public IP,并将所有的连接重定向到服务。你可以通过访问负载均衡器IP来访问服务。

如果Kubernets运行在一个不支持LoadBalancer服务的环境中运行,则不会调负载均衡器。

LoadBalancer类型的YAML

----------------------------

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: MyApp

----------------------------

可以通过访问负载均衡器的IP访问服务。

注意一下下面的设置,可以查看一下官网

spec;

  externalTrafficPolicy : Local

 

3.1通过Ingress暴露服务

为什么要用Ingress,一个重要的原因是LoadBalancer需要自己独立的IP,而Ingress只需要一个公网IP就能为许多服务器提供访问。

Ingress类型的YAML

----------------------------------------

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: name-virtual-host-ingress
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: service2
          servicePort: 80

---------------------------------------

创建好Ingress之后,Ingress将域名foo.bar.com和bar.foo.com映射到服务上,注意需要把域名foo.bar.com和bar.foo.com放的DNS上,这样就可以通过域名解析访问到服务了。

foo.bar.com和bar.foo.com在DNS上是相同的IP。这样就可以了,访问不同的服务可以通过path就可以区分不同的服务了。

目前是Http服务,还可以是Https服务,这要就需要配置TLS的证书和私钥。

还有就是Pod还有一个就绪探针。有的Pod刚被创建,可能不会马上就提供服务,还需要准备一些资源。这样就可以需要就绪探针定时取检测目前Pod是否是可以提供服务的。如果不能提供服务,Ingress等服务在接受到外部的请求时,就不会放该Pod上转发请求。

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值