K8S暴露服务的三种方式
在k8s上可以给Service设置成NodePort类型,这样的话可以让Kubernetes在其所有主机节点上开放一个端口给外部访问(所有节点上都使用相同的端口号), 并将传入的连接转发给作为Service服务对象的pod。这样我们的pod就可以被外部请求访问到这里对外提供访问的是真实主机和端口号,下图和上图端口对应上你就会发现各自的关系NodePort 会在每个节点上开启端口,服务越多端口号对外
暴露服务的三种方式
- NodePort
将服务的类型设置成NodePort-每个集群节点都会在节点上打 开 一
个端口, 对于NodePort服务, 每个集群节点在节点本身(因此得名叫
NodePort)上打开一个端口,并将在该端口上接收到的流量重定向到基础服务。
该服务仅在内部集群 IP 和端口上才可访间, 但也可通过所有节点上的专用端
口访问。 - LoadBalane
将服务的类型设置成LoadBalance, NodePort类型的一 种扩展,这使得
服务可以通过一个专用的负载均衡器来访问, 这是由Kubernetes中正在运行
的云基础设施提供的(例如AWS提供)。 负载均衡器将流量重定向到跨所有节点的节点端口。
客户端通过负载均衡器的 IP 连接到服务。 - Ingress
创建一 个Ingress资源, 这是一 个完全不同的机制, 通过一 个IP地址公开多
个服务,就是一个网关入口,和springcloud的网关zuul、gateway类似。后面详细总结这个
————————————————
版权声明:以上内容为CSDN博主「新林。」的原创文章
NodePort
在k8s上可以给Service设置成NodePort类型,这样的话可以让Kubernetes在其所有主机节点上开放一
个端口给外部访问(所有节点上都使用相同的端口号), 并将传入的连接转发给作为Service服务对象的
pod。这样我们的pod就可以被外部请求访问到
这里对外提供访问的是真实主机和端口号,下图和上图端口对应上你就会发现各自的关系
注:
spec.ports.nodePort这个参数是指Node节点对外开放访问的端口号,如果不指定,则Kubernetes会随机选择一个端口号1.kubia为指定的service对象名称
2.- -port指定集群内部访问的端口
3.- -target-port指定容器内跑服务的端口
4.- -type=NodePort 指定类型 集群外部访问
5.–dry-run表示测试不在k8s运行(不会具体执行该命令)
6.-o yaml 生成yaml格式
7.最后面的 “> deploy.yaml” 表示将生成yaml内容输出到deploy.yaml文件
NodePort 会在每个节点上开启端口,服务越多端口号对外暴露的就越多,不但会造成安全风险而且难以维护,所以生产环境不建议这么使用
LoadBalane
LoadBalane是上面通过NodePort暴露外部访问的一个优化,增加了一个负载均衡器,上面的NodePort是所有节点都开放一个端口,直接给外部访问,并没有Node节点的负载均衡。LoadBalane则是在上面的基础上增加了一层,只提供一个公网ip给外部访问,外部访问这个ip再负载均衡分发给Node节点的Pod
注: 在云提供商上运行的Kubernetes集群通常支持从云基础架构自动提供负载平衡器。 所有需要做的就是设置服务的类型为Load
Badancer而不是NodePort。 负载均衡器拥有自己独一无二的可公开访问的 IP 地址,
并将所有连接重定向到服务。可以通过负载均衡器的 IP 地址访问服务。如果Kubemetes在不支持Load
Badancer服务的环境中运行, 则不会调配负载平衡器, 但该服务仍将表现得像 一 个NodePort服 务。
这是因为LoadBadancer服务是NodePod服务的扩展。需要云厂商提供基础服务
Ingress
采用 NodePort 方式暴露服务面临问题是,服务一旦多起来,NodePort 在每个节点上开启的端口会及其庞大,而且难以维护;如果采用LoadBalane,每个服务都得开放一个公网IP,也会很庞大。这时候Ingress暴露服务就是一种很合适的方案。可以通过一个Ingress暴露多个服务类似于nginx的功能。
这里我们创建了一个ingres并把不动的域名地址指向不同的service服务,而每个service服务又绑定了不同的pod。如此我们只需要一个机器入口,根据不同的域名反向解析到不同的service从而提供不通的pod服务。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-http
namespace: dev
spec:
rules:
- host: nginx.itheima.com
http:
paths:
- path: /
backend:
serviceName: nginx-service
servicePort: 80
- host: tomcat.itheima.com
http:
paths:
- path: /
backend:
serviceName: tomcat-service
servicePort: 8080
详细ingress实操请参考
我都博文Ingress
内容参考
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
部分原文链接:https://blog.csdn.net/qq_21187515/article/details/112363072
更多推荐
所有评论(0)