k8s服务暴露
所属分类 k8s
浏览量 360
k8s暴露 Service 服务主要方式
ClusterIP NodePort LoadBalancer Ingress
ClusterIP 集群内部
NodePort LoadBalancer Ingress 对外暴露
ClusterIP 是默认的 Service 类型
ClusterIP 无法从外部访问,一般用于服务之间的内部网络
spec.metadata.type: ClusterIP
apiVersion: v1
kind: Service
spec:
metadata:
name: demo-service
selector:
app: demo-app
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8080
protocol: TCP
到 ClusterIP 上端口 80 的流量将转发到 Pod 上的端口 8080 (targetPort),
携带 app: demo-app 标签的 Pod 将被添加到 Service 中作为作为服务的可用端点
kubectl get svc demo-app 查看该服务所分配 IP 地址
集群中的其他服务可以使用 IP:80 访问该服务
spec.clusterIp 指定 IP 地址
spec:
type: ClusterIP
clusterIp: 110.110.110.110
NodePort
将 Service 设置成 NodePort 类型,
每个 Node 节点上开放同一固定端口 nodePort 向集群外部暴露服务,自动将端口流量路由到它所连接的服务。
在集群外部需要使用集群的 IP 地址和 NodePort 指定的端口访问
apiVersion: v1
kind: Service
metaadata:
name: demo-service
spec:
selector:
app: demo-app # 容器标签
type: NodePort # 服务类型
ports:
- name: http
port: 80 # 服务端口号,供内部访问
targetPort: 8080 # 目标内部 Pod 端口,端口一定要和容器暴露出来的端口对应
nodePort: 30123 # 所有的节点都会开放此端口,此端口供外部调用。
protocol: TCP
spec.ports.nodePort 指定 Node 节点对外开放访问的端口号,
如果不指定,随机选择一个端口号,默认范围30000-32767,手动指定端口也得在这个范围内
demo-app 为指定的 service 对象名称
port 指定集群内部访问的端口
targetPort 指定容器内服务的统一端口
缺点
NodePort 没有负载均衡的能力,并且会在每个节点上开启端口,服务越多端口号对外暴露的就越多,会造成安全风险,且难以维护。
LoadBalancer
NodePort 所有节点都开放同一固定端口,直接给外部访问,并没有 负载均衡。
LoadBalancer 增加负载均衡器,只提供一个公网 ip 给外部访问,外部访问这个 ip 再负载均衡分发给 Node 节点的 Pod 。
依赖云提供商
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector:
app: demo-app
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 8080
Ingress
LoadBalancer,每个服务开放一个公网IP
采用 Ingress 暴露多个服务,类似于 nginx的功能
可以设置外部 URL、基于域名的虚拟主机、SSL 和负载均衡。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-http
namespace: dev
spec:
rules:
- host: nginx.demo.com
http:
paths:
- path: /
backend:
serviceName: nginx-service
servicePort: 80
- host: tomcat.demo.com
http:
paths:
- path: /
backend:
serviceName: tomcat-service
servicePort: 8080
nginx.demo.com 流量路由到 nginx-service 服务上的端口 80
tomcat.demo.com 流量路由到 tomcat-service
ClusterIP 集群内部服务通信
NodePort 向集群外部暴露 TCP 和 UDP 服务,没有负载均衡的能力,并且会在每个节点上开启端口,一个服务暴露一个端口
LoadBalancer 在 NodePort 的基础上增加了一层,只提供一个公网 ip 给外部访问,外部访问这个 ip 再负载均衡分发给 Node 节点的 Pod
Ingress 向外暴露HTTP服务,且可以提供域名和URL路径负载均衡路由能力
上一篇
下一篇
nsenter命令
以Docker为代表的容器技术介绍
docker和containerd
容器化部署 docker docker-compose k8s
vertx core web 实例
JAVA Void类