在CentOS上部署Kubernetes集群并让其可以访问外部网络是一个常见的需求。下面我将向你详细介绍如何完成这个任务。

### 步骤概览
首先,让我们通过表格展示一下整个过程的步骤:

| 步骤 | 操作 |
| ---- | ---- |
| 1. 安装Docker | 使用yum包管理器安装Docker |
| 2. 安装kubeadm, kubelet和kubectl | 配置Kubernetes yum源并安装kubeadm, kubelet和kubectl |
| 3. 初始化Kubernetes集群 | 在Master节点上运行kubeadm init初始化Kubernetes集群 |
| 4. 部署Pod网络 | 部署网络插件以使Pod可以相互通信 |
| 5. 加入Worker节点 | 在Worker节点上运行kubeadm join加入集群 |
| 6. 部署Ingress Controller | 部署Ingress Controller以实现外部网络访问 |

现在让我们逐步进行操作并给出相应的代码示例。

### 操作步骤

#### 1. 安装Docker
```bash
sudo yum install -y docker # 使用yum包管理器安装Docker
sudo systemctl enable docker # 设置Docker开机自启动
sudo systemctl start docker # 启动Docker服务
```

#### 2. 安装kubeadm, kubelet和kubectl
```bash
sudo tee /etc/yum.repos.d/kubernetes.repo <<-'EOF'
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

sudo yum install -y kubeadm kubelet kubectl # 安装kubeadm, kubelet和kubectl
sudo systemctl enable kubelet # 设置kubelet开机自启动
sudo systemctl start kubelet # 启动kubelet服务
```

#### 3. 初始化Kubernetes集群
```bash
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 # 初始化Kubernetes集群并指定Pod网络CIDR
```

#### 4. 部署Pod网络
```bash
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml # 部署Calico网络插件
```

#### 5. 加入Worker节点
```bash
# 在Worker节点上运行以下命令,将输出的kubeadm join命令复制到Worker节点上执行
sudo kubeadm token create --print-join-command
```

#### 6. 部署Ingress Controller
```bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml # 部署NGINX Ingress Controller
```

### 总结
通过以上步骤,你已经成功在CentOS上部署并让Kubernetes集群可以访问外部网络。现在你可以尝试部署应用程序并通过Ingress Controller实现外部访问。希望这篇文章能够帮助到你,祝你学习顺利!