# 在 Minikube 中部署 Ingress

在 Minikube 中部署 Ingress 控制器需要以下步骤，我将为您提供完整指南：

### 1. 启动 Minikube 并启用 Ingress 插件
```bash
minikube start --driver=docker --cpus=2 --memory=4g  # 推荐至少2核4G内存
minikube addons enable ingress
```

### 2. 验证 Ingress 控制器是否运行
```bash
kubectl get pods -n ingress-nginx
```
正常应该看到3个Pod，类似：
```
NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create--1-x2n5g     0/1     Completed   0          1m
ingress-nginx-admission-patch--1-x8p7k      0/1     Completed   0          1m
ingress-nginx-controller-5d88495688-d7v6r   1/1     Running     0          1m
```

### 3. 部署测试应用
```bash
# 创建部署
kubectl create deployment web --image=nginx

# 暴露服务
kubectl expose deployment web --port=80
```

### 4. 创建 Ingress 资源
创建 `ingress.yaml` 文件：
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: web.minikube.test
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web
            port:
              number: 80
```

应用配置：
```bash
kubectl apply -f ingress.yaml
```

### 5. 访问应用
#### 方法1：修改本地hosts文件
```bash
echo "$(minikube ip) web.minikube.test" | sudo tee -a /etc/hosts
```
然后在浏览器访问：http://web.minikube.test

#### 方法2：使用curl测试
```bash
curl -H "Host: web.minikube.test" $(minikube ip)
```

### 常见问题解决

1. **Ingress 插件无法启用**
   ```bash
   minikube delete
   minikube start --driver=docker --cpus=2 --memory=4g
   minikube addons enable ingress
   ```

2. **Pod 卡在 ContainerCreating**
   ```bash
   minikube ssh -- docker pull registry.k8s.io/ingress-nginx/controller:v1.8.1
   minikube ssh -- docker pull registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20230407
   ```

3. **查看详细日志**
   ```bash
   kubectl describe ingress example-ingress
   kubectl logs -n ingress-nginx ingress-nginx-controller-xxxx
   ```
4. **其他部署失败**
   ```bash
   # 下载安装yaml文件到服务器
   wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.2/deploy/static/provider/cloud/deploy.yaml
   # 调整"deploy.yaml"源文件
   sed -i 's#registry.k8s.io/ingress-nginx/controller:v1.11.2@sha256:d5f8217feeac4887cb1ed21f27c2674e58be06bd8f5184cacea2a69abaf78dce#registry.aliyuncs.com/google_containers/nginx-ingress-controller:v1.11.2#g' deploy.yaml
   sed -i 's#registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.3@sha256:a320a50cc91bd15fd2d6fa6de58bd98c1bd64b9a6f926ce23a600d87043455a3#registry.aliyuncs.com/google_containers/kube-webhook-certgen:v1.4.3#g' deploy.yaml

   # 执行安装命令
   kubectl apply -f deploy.yaml
   # 删除安装
   kubectl delete -f deploy.yaml

   [参考文档](https://blog.csdn.net/z1299236067/article/details/142502502)
   ```
### 高级配置

1. **启用HTTPS**
   ```bash
   # 生成自签名证书
   openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
     -keyout tls.key -out tls.crt -subj "/CN=web.minikube.test"
   
   # 创建TLS secret
   kubectl create secret tls web-tls --cert=tls.crt --key=tls.key
   
   # 更新ingress.yaml添加tls配置
   spec:
     tls:
     - hosts:
       - web.minikube.test
       secretName: web-tls
   ```

2. **查看Ingress控制器日志**
   ```bash
   kubectl logs -n ingress-nginx deployment/ingress-nginx-controller -f
   ```

### 清理资源
```bash
kubectl delete ingress example-ingress
kubectl delete service web
kubectl delete deployment web
minikube addons disable ingress
```

通过以上步骤，您可以在Minikube中完整部署和使用Ingress功能。如果遇到问题，建议检查Pod日志和Ingress控制器的状态。