设置nodeports后外网无法访问问题

Kubernetes权威指南第一章的第一个demo

curl可以访问,但是外网无法访问。


一开始就关闭firewalld,还是外网无法访问。


定位了很久,发现,是centos问题。 


先打开firewalld,把30001端口放开,然后关闭firewalld,这时候,外网就能访问了。

<think>好的,我现在需要解释Kubernetes中的`services.loadbalancers: "2"`和`services.nodeports: "10"`这两个配额限制的作用。首先,我得回忆一下Kubernetes中Service的类型和相关配额的知识。 用户之前已经了解了requests和limits的CPU配额,现在转向服务类型的配额,可能需要理解这些资源如何被限制以及为什么需要这样的限制。首先,Kubernetes中的Service主要有几种类型,ClusterIPNodePort和LoadBalancer,其中后两者涉及到外部访问。LoadBalancer类型的Service通常由云提供商提供外部负载均衡器,而NodePort则是在每个节点上开放一个端口,将流量转发到Service。 那么,`services.loadbalancers: "2"`应该是指在一个命名空间中最多可以创建2个LoadBalancer类型的Service。同样,`services.nodeports: "10"`则是限制命名空间内最多10个NodePort类型的Service。需要确认的是,这里的配额是否准确,比如是否每个Service不管类型都算,还是只针对特定类型。根据Kubernetes的文档,ResourceQuota确实可以针对特定类型的Service进行限制,比如services.loadbalancers和services.nodeports是两种独立的资源类型,用于限制对应类型的Service数量。 接下来,我需要解释为什么需要这样的限制。对于LoadBalancer来说,每个Service都可能对应云平台上的一个负载均衡器实例,这会产生成本,比如AWS的ELB或GCP的Load Balancer,每个负载均衡器都有费用。过多的LoadBalancer实例可能导致不必要的开销,所以通过配额限制可以控制成本和资源使用。同样,NodePort会占用集群节点上的端口,每个NodePort会分配一个端口(默认范围30000-32767),端口数量有限,过多的NodePort可能导致端口耗尽,影响其他服务。 然后,需要考虑用户可能的疑问,比如如果配额用尽会怎样。当用户尝试创建超过配额的Service时,Kubernetes API会拒绝请求,并返回错误,提示资源不足。例如,如果已经有两个LoadBalancer,再创建第三个会被拒绝。 另外,需要说明这些配额如何与其他配额配合使用,比如之前提到的CPU配额,以及可能存在的其他资源配额如内存、存储等。同时,可能还需要提到如何查看当前配额的使用情况,使用kubectl命令,如`kubectl describe resourcequota`。 还需要注意,LoadBalancer和NodePort的使用场景。LoadBalancer通常用于需要外部访问且云平台支持的情况,而NodePort则是在没有云负载均衡器时的替代方案,或者用于测试环境。因此,限制它们的数量有助于规范使用,确保生产环境中不会因误操作创建过多高成本的资源。 最后,可能需要给出一些实际例子,比如在ResourceQuota中设置这些限制,然后演示创建Service时的行为,以及如何监控和管理这些配额。同时,提醒用户合理设置配额,避免过紧影响正常服务部署,或过松导致资源浪费。</think>--- ### 核心概念拆解 ```yaml services.loadbalancers: "2" # 限制LoadBalancer类型的Service数量 services.nodeports: "10" # 限制NodePort类型的Service数量 ``` --- ### 类比解释 **场景**:将Kubernetes集群比作一个**大型购物中心** - `LoadBalancer`服务 = **直达电梯**(专门对接外部流量,成本高) - `NodePort`服务 = **消防通道**(所有节点开放固定端口,存在安全隐患) --- ### 具体限制作用 | 配额类型 | 限制对象 | 典型场景风险 | 管控意义 | |---------------------------|----------------------------------|--------------------------------|----------------------------| | `services.loadbalancers` | LoadBalancer类型的Service数量 | 云平台负载均衡器费用激增 | 控制云资源成本 | | `services.nodeports` | NodePort类型的Service数量 | 节点端口耗尽/安全攻击面扩大 | 防止端口滥用和安全风险 | --- ### 生产环境中的典型表现 #### 案例1:LoadBalancer超限 ```bash # 尝试创建第3个LoadBalancer时被拒绝 Error from server (Forbidden): exceeded quota: prod-quota, requested: services.loadbalancers=1, used: services.loadbalancers=2, limited: services.loadbalancers=2 ``` #### 案例2:NodePort端口冲突 ```bash # 已有10个NodePort服务时,新服务无法分配端口 Error: service "web" is invalid: spec.ports[0].nodePort: Invalid value: 31000: port is already allocated ``` --- ### 配置示例 ```yaml # ResourceQuota配置(命名空间级限制) apiVersion: v1 kind: ResourceQuota metadata: name: network-quota namespace: production spec: hard: services.loadbalancers: "2" # 最多2个LB services.nodeports: "10" # 最多10个NodePort ``` --- ### 关键注意事项 1. **成本控制** - 每个LoadBalancer对应云厂商的实际计费资源(如AWS的NLB每小时$0.0225) - 2个LB的年度成本:2 * 0.0225 * 24 * 365 ≈ $394 2. **端口管理** - NodePort默认端口范围30000-32767(共2768个端口) - 限制10个NodePort后,其他服务仍可用自动分配(避免手动指定导致冲突) 3. **替代方案** - 优先使用`Ingress`统一管理入口流量(1个LB+N个Ingress规则更经济) - 内部服务尽量使用`ClusterIP`类型 --- ### 运维监控技巧 ```bash # 查看配额使用情况 kubectl describe resourcequota network-quota -n production # 过滤显示LoadBalancer服务 kubectl get svc -n production -o json | jq '.items[] | select(.spec.type=="LoadBalancer") | .metadata.name' # 列出所有NodePort及其端口 kubectl get svc -n production -o=jsonpath='{range .items[?(@.spec.type=="NodePort")]}{.metadata.name}:{.spec.ports[0].nodePort}{"\n"}{end}' ``` --- ### 配额设计建议 | 环境类型 | LoadBalancer建议值 | NodePort建议值 | 理由 | |------------|--------------------|----------------|-----------------------------| | 开发环境 | 1 | 5 | 防止测试服务占用过多资源 | | 生产环境 | 2-3 | 10-20 | 保证核心业务高可用 | | 沙箱环境 | 0 | 0 | 强制使用Ingress+ClusterIP | 通过这种配额管理,可以有效避免云资源浪费和端口滥用问题,同时引导团队采用更优的网络架构设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值