Skip to main content

在 Minikube 中部署 Ingress

在 Minikube 中部署 Ingress 控制器需要以下步骤,我将为您提供完整指南:

1. 启动 Minikube 并启用 Ingress 插件

minikube start --driver=docker --cpus=2 --memory=4g  # 推荐至少2核4G内存
minikube addons enable ingress

2. 验证 Ingress 控制器是否运行

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. 部署测试应用

# 创建部署
kubectl create deployment web --image=nginx

# 暴露服务
kubectl expose deployment web --port=80

4. 创建 Ingress 资源

创建 ingress.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

应用配置:

kubectl apply -f ingress.yaml

5. 访问应用

方法1:修改本地hosts文件

echo "$(minikube ip) web.minikube.test" | sudo tee -a /etc/hosts

然后在浏览器访问:http://web.minikube.test

方法2:使用curl测试

curl -H "Host: web.minikube.test" $(minikube ip)

常见问题解决

  1. Ingress 插件无法启用

    minikube delete
    minikube start --driver=docker --cpus=2 --memory=4g
    minikube addons enable ingress
    
  2. Pod 卡在 ContainerCreating

    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. 查看详细日志

    kubectl describe ingress example-ingress
    kubectl logs -n ingress-nginx ingress-nginx-controller-xxxx
    
  4. 其他部署失败

    # 下载安装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

    # 生成自签名证书
    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控制器日志

    kubectl logs -n ingress-nginx deployment/ingress-nginx-controller -f
    

清理资源

kubectl delete ingress example-ingress
kubectl delete service web
kubectl delete deployment web
minikube addons disable ingress

通过以上步骤,您可以在Minikube中完整部署和使用Ingress功能。如果遇到问题,建议检查Pod日志和Ingress控制器的状态。