k8s对外提供服务的方式
Ingress 是一种 API 对象,定义了如何将外部流量引导到集群中的 Service。Ingress 可以通过不同的规则和路径将请求路由到不同的 Service。字段指定外部 IP 地址,该地址将映射到 Service 的 ClusterIP。这种方式仅适用于某些特殊场景,因为它涉及到手动配置和管理外部 IP。允许将服务映射到集群外的某个外部 DNS 名称。它不提供负载均衡和服务发现,而是充当
·
Kubernetes (K8s) 提供了多种方式来向外部提供服务。以下是其中一些常用的方式:
-
Service类型:
- ClusterIP(集群内部服务): 默认的 Service 类型,Service 将分配一个 ClusterIP(仅在集群内可访问的虚拟 IP 地址),在集群内提供服务发现和负载均衡。
- NodePort(主机端口映射): Service 将在每个节点上的相同端口(NodePort)上公开服务。通过
<NodeIP>:<NodePort>
可以从集群外访问服务。 - LoadBalancer(云厂商负载均衡器): 在云环境中,Service 可以通过云提供商的负载均衡器公开。这将导致在云提供商上创建一个外部负载均衡器,并为该负载均衡器配置一个唯一的 IP 地址。
示例:
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 8080 type: NodePort
-
Ingress: Ingress 是一种 API 对象,定义了如何将外部流量引导到集群中的 Service。Ingress 可以通过不同的规则和路径将请求路由到不同的 Service。通常需要一个 Ingress Controller 来处理 Ingress 规则。
示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: mydomain.com http: paths: - path: /app pathType: Prefix backend: service: name: my-service port: number: 80
-
ExternalIP: Service 可以通过
externalIPs
字段指定外部 IP 地址,该地址将映射到 Service 的 ClusterIP。这种方式仅适用于某些特殊场景,因为它涉及到手动配置和管理外部 IP。示例:
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 8080 externalIPs: - 203.0.113.1
-
ExternalName: Service 类型
ExternalName
允许将服务映射到集群外的某个外部 DNS 名称。它不提供负载均衡和服务发现,而是充当 DNS 别名。示例:
apiVersion: v1 kind: Service metadata: name: my-service spec: type: ExternalName externalName: external-service.example.com
选择使用哪种方式取决于需求和环境,通常使用 NodePort
或 LoadBalancer
在集群外公开服务,而使用 Ingress
来实现高级的路由和负载均衡。
更多推荐
已为社区贡献31条内容
所有评论(0)