从外部访问K8s中Pod的五种方式

本文详细介绍了Kubernetes中五种服务暴露机制:hostNetwork、hostPort、NodePort、LoadBalancer与Ingress。每种机制都有其独特作用与适用场景,如NodePort允许外部通过特定端口访问集群内服务,而Ingress则提供更高效的外部访问途径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hostNetwork、hostPort、NodePort、LoadBalancer、Ingress

暴露Pod与Service一样,因为Pod就是Service的backend

    1、hostNetwork:true    在pod中使用该配置,在这种Pod中运行的应用程序可以直接看到pod启动的主机的网络接口。

    注:每次pod的IP是会变化的

    2、hostPort:直接将容器的端口与所调度的节点上的端口路由,这样用户就可以通过主机的IP来访问Pod了

    注:Pod重新调度时该Pod可能会被调度到不同的宿主机,因此,需要维护一个Pod与宿主机的对应关系

    3、NodePort:是K8s里一个广泛应用的服务暴露方式。K8s中的service默认情况都是使用Cluster IP这种类型,会产生一个只能在内部访问的Cluster IP,如果想能够直接访问service,需要将service type修改为nodePort。同时给改service指定一个nodeport值(30000-32767),用` --service-node-port-range`定义。

    集群外就可以使用K8s任意一个节点的IP加上30000端口访问该服务了,kube-proxy会自动将流量以轮询的方式转发给该service的每一个pod。

4、​LoadBalancer:只能在service上定义,是公有云提供的负载均衡器。

​查看服务:` kubectl get svc influxdb`

​内部可以使用ClusterIP加端口来访问服务

外部可以使用两种方式:

    任意节点的IP加30051端口访问服务 10.97.121.42:30051

    使用EXTERNAL-IP来访问,这是云供应商提供的负载均衡IP    10.13.242.236:8086

5、​Ingress:ingress controller是由K8s管理的负载均衡容器,它的镜像包含一个nginx或HAProxy负载均衡器和一个控制器守护进程。

​外部访问URL  http://influxdb.kube.example.com/ping 访问该服务,入口是80端口,然后Ingress controller直接将流量转发给后端Pod,不需再经过kube-proxy的转发,比LoadBalance方式更高效

参考:https://jimmysong.io/posts/accessing-kubernetes-pods-from-outside-of-the-cluster/

 

 

 

 

 

 

 

 

### 配置 Kubernetes 外部访问 Tomcat Pod 的最佳实践 在 Kubernetes 中实现外部网络访问 Tomcat Pod 可以通过两种主要方式完成:Service 和 Ingress。以下是这两种方法的具体说明。 #### 使用 Service 实现外部访问 Kubernetes 提供了几种类型的 Service 来暴露应用给外部流量,其中最常用的是 `NodePort` 和 `LoadBalancer` 类型的服务: - **NodePort**: 将服务映射到节点上的特定端口 (范围通常为 30000 到 32767),从而允许外部客户端通过 `<node-ip>:<node-port>` 访问该服务。 ```yaml apiVersion: v1 kind: Service metadata: name: tomcat-service spec: type: NodePort ports: - port: 8080 targetPort: 8080 nodePort: 30001 selector: app: tomcat ``` - **LoadBalancer**: 如果云提供商支持,则会自动创建一个负载均衡器并将请求转发至集群内的服务实例。此选项适用于托管环境下的 K8S 集群[^1]。 #### 使用 Ingress 实现外部访问 对于更复杂的路由需求或者希望减少对外暴露的 IP 地址数量时,可以考虑采用 Ingress 资源配合相应的控制器一起工作: - 创建一个名为 `ingress-tomcat.yaml` 文件定义如下规则: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: tomcat-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: tomcat.example.com http: paths: - pathType: Prefix path: "/" backend: service: name: tomcat-service port: number: 8080 ``` - 确保已经安装并运行了一个合适的 Ingress 控制器(比如 NGINX),它负责监听 API Server 并动态更新其内部代理设置以便于处理传入连接[^4]。 上述配置中提到的 Host 字段可以根据实际域名调整;Path 定义了匹配 URL 前缀的行为模式。当用户尝试打开指定地址时,他们的浏览器会被引导至关联好的后端服务上去[^2]。 最后值得注意的一点在于某些情况下可能还需要额外的安全措施诸如 SSL/TLS 加密传输数据流等操作,在这种场景下可以通过修改 YAML 添加 secret 引用字段来启用 HTTPS 支持[^3]。 ```bash kubectl apply -f ingress-tomcat.yaml ``` 以上命令用于提交更改后的 manifest 至当前上下文中所选 namespace 下生效执行整个流程直至成功部署完毕为止。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值