Centos中k8s外网无法访问nodePort问题

 部署玩k8s后,自动部署了一个web项目,本地访问正常,外部不能访问,是由于k8s的的iptables导致的,设置转发,即可解决这个问题。

iptables -P FORWARD ACCEPT

 

### 设置和配置 Kubernetes (k8s) 环境 #### 准备工作 为了成功安装并运行Kubernetes集群,需要准备至少一台或多台机器作为集群节点。对于实验环境而言,三台机器是一个常见的选择方案[^1]。 每台机器的操作系统应为CentOS 7.x 版本,并且架构需支持64位程序执行。硬件资源方面建议最低配置为核心数不少于两核、内存不小于4GB以及磁盘容量不低于20G的空间来确保系统的稳定性和性能表现。 #### 配置主机信息 针对具体的服务器配置如下表所示: | 服务器名称 | 系统版本 | CPU/内存/硬盘 | 内网IP | 外网IP | |------------|----------------|------------------|-------------|---------------| | k8s-master | CentOS 7.7 | 2C/4G/20G | 172.16.1.110| 10.0.0.110 | | k8s-node01 | CentOS 7.7 | 2C/4G/20G | 172.16.1.111| 10.0.0.111 | | k8s-node02 | CentOS 7.7 | 2C/4G/20G | 172.16.1.112| 10.0.0.112 | 上述表格中的`hostname`代表各节点的名字;而内外网络地址则用于区分不同类型的通信需求,在实际部署过程中可根据实际情况调整这些参数设置。 #### 安装与初始化 Master 节点 在master节点上完成必要的软件包更新之后,通过命令行工具如yum或apt-get获取最新的kubelet,kubeadm,kubectl组件。接着利用`kubeadm init`指令启动初始化过程,期间会自动下载所需镜像并建立初始控制平面实例。 ```bash sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes sudo systemctl enable --now kubelet sudo kubeadm init --pod-network-cidr=192.168.0.0/16 ``` 注意这里的`--pod-network-cidr`选项指定了Pod之间相互访问所使用的私有子网范围,具体数值可以根据个人喜好设定。 #### 加入 Worker Nodes 至 Cluster 中 一旦Master已经准备好,则可以在其他worker nodes上面重复相同步骤以安装相同的客户端工具集(`kubectl`)和服务端守护进程(`kubelet`)。随后依据由`kubeadm init`输出的信息所提供的token字符串以及其他必要参数,运用下面这条语句让新成员加入到现有群集中去: ```bash sudo kubeadm join <control-plane-host>:<control-plane-port> --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> ``` 以上操作完成后即实现了基本的多节点Kubernetes集群搭建流程。 #### 使用 nodeName 和 nodeSelector 进行 Pod 的调度管理 当希望某些特定的应用仅能在指定的工作节点之上被执行时,可以通过定义`nodeName`字段直接绑定目标Node,或者借助于标签选择器机制——也就是所谓的`nodeSelector`特性实现更加灵活的任务分配策略[^2]。 例如,如果想要强制某应用只能够在名为"k8s-node01"这台设备上被安排执行的话,那么就可以在其描述文档中添加类似这样的片段: ```yaml apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: "k8s-node01" ``` 而对于那些希望通过属性匹配方式来进行筛选的情况来说,则应该采用另一种形式书写YAML文件内容: ```yaml apiVersion: v1 kind: Pod metadata: name: mysql spec: containers: - name: mysql image: mysql nodeSelector: disktype: ssd ``` 在此基础上,还需提前给定相应的Node对象附加合适的key-value对标签以便后续查询使用。 #### 配置环境变量及 ConfigMap 最后一步涉及到如何有效地管理和传递应用程序所需的外部依赖项数据。为此目的引入了ConfigMaps的概念,它允许用户将一系列预设好的键值对存储起来供内部调用者随时读取引用。创建一个新的config map可通过CLI接口轻松达成: ```bash kubectl create configmap special-config --from-literal=special.how=very ``` 而在编写服务模板的时候也只需简单声明即可加载对应的数据源: ```yaml apiVersion: v1 kind: Pod metadata: name: dapi-test-pod data: myvalue: "Hello World" envFrom: - configMapRef: name: special-config ``` 这样就完成了整个Kubernetes环境的基础构建与高级特性的介绍[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值