You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu虚拟机中Minikube Nginx-Ingress与主机Nginx Web Server能否共存?

Minikube Nginx-Ingress与主机Nginx共存方案

可以共存,核心是解决端口冲突问题(主机Nginx已占用80/443端口),同时完全在K8S环境内配置HTTPS访问,无需修改主机Nginx的server block。具体操作如下:

1. 调整Minikube Nginx-Ingress的端口

主机Nginx已经占用了80和443端口,因此需要修改Minikube中Nginx-Ingress控制器的NodePort端口,使用主机未占用的端口(比如30080用于HTTP,30443用于HTTPS):

  • 查看当前Ingress控制器服务:
    kubectl get svc -n kube-system nginx-ingress
    
  • 编辑该服务,修改NodePort配置:
    kubectl edit svc nginx-ingress -n kube-system
    
    在编辑界面中找到ports段,修改nodePort为自定义端口:
    ports:
      - name: http
        nodePort: 30080
        port: 80
        protocol: TCP
        targetPort: 80
      - name: https
        nodePort: 30443
        port: 443
        protocol: TCP
        targetPort: 443
    
    保存退出后,Ingress控制器将使用新端口对外提供服务。

2. 在K8S内部配置HTTPS证书

使用cert-manager在K8S集群内自动申请并管理Let's Encrypt证书,所有配置均在K8S环境内完成:

  • 安装cert-manager到K8S集群(可通过官方发布的YAML文件部署)
  • 创建ClusterIssuer,用于和Let's Encrypt的ACME服务交互:
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-prod
    spec:
      acme:
        server: https://acme-v02.api.letsencrypt.org/directory
        email: 你的邮箱地址@example.com
        privateKeySecretRef:
          name: letsencrypt-prod
        solvers:
        - http01:
            ingress:
              class: nginx
    
    将上述内容保存为cluster-issuer.yaml,执行kubectl apply -f cluster-issuer.yaml部署。
  • 配置Ingress资源,关联证书并指向你的Hello-World服务:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: hello-world-ingress
      annotations:
        cert-manager.io/cluster-issuer: letsencrypt-prod
    spec:
      ingressClassName: nginx
      tls:
      - hosts:
        - hello-world.info
        secretName: hello-world-tls
      rules:
      - host: hello-world.info
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: hello-world-service
                port:
                  number: 80
    
    保存为hello-world-ingress.yaml,执行kubectl apply -f hello-world-ingress.yaml。cert-manager会自动申请证书并挂载到Ingress中。

3. 开放端口与域名解析

  • 在DigitalOcean的虚拟机防火墙规则中,添加30080(HTTP)和30443(HTTPS)端口的入站允许规则。
  • 将hello-world.info域名解析到你的虚拟机公网IP,外部即可通过https://hello-world.info:30443访问Minikube中的服务。

补充说明

  • 若不想在访问时携带端口,可考虑使用主机Nginx做反向代理转发到Minikube的Ingress端口,但这会涉及修改主机Nginx的server block,不符合你的需求,因此不推荐。
  • 本地测试时,可在/etc/hosts中添加虚拟机IP hello-world.info,直接通过https://hello-world.info:30443访问。

内容的提问来源于stack exchange,提问作者Golide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:23:08