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

在MacOS Docker for Mac(Edge)的K8s中部署Nginx-Ingress及本地访问问题

Docker for Mac Edge上Nginx Ingress的问题解答

问题1:NodePort正常工作后,还需要执行port-forward吗?

兄弟,看你贴的kubectl get services输出,你的NodePort已经完全配置到位了——ingress controller的80端口映射到了宿主机的32706,443映射到32253。这种情况下完全没必要再做port-forward操作!

NodePort的核心作用就是把集群内部的服务端口暴露到宿主机(你的Mac)上,你直接用localhost:32706或者localhost:32253就能访问到ingress controller了。port-forward只是用来临时暴露单个Pod或服务的工具,现在NodePort已经满足了你的访问需求,多此一举反而会增加不必要的复杂度。

你提供的kubectl get services输出参考:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d
my-release-nginx-ingress-controller NodePort 10.105.64.135 <none> 80:32706/TCP,443:32253/TCP 10m
my-release-nginx-ingress-default-backend ClusterIP 10.98.230.24 <none> 80/TCP 10m

问题2:Docker for Mac(Edge)上用Helm安装的Nginx Ingress能不能本地运行?怎么访问?

当然可以本地运行!Docker for Mac Edge版本对Kubernetes的支持已经非常完善,你用Helm安装的流程也完全没问题,下面给你两种具体的访问方式:

方式一:用已配置好的NodePort访问

这就是你当前采用的方式,直接在浏览器输入http://localhost:32706或者https://localhost:32253就能打到ingress controller。不过要注意,你得先创建对应的Ingress资源来路由你的业务服务,否则会返回默认backend的页面。你可以参考官方提供的示例Ingress模板,把serviceName换成你自己的服务名,servicePort改成对应的端口即可。

方式二:LoadBalancer类型的访问(若想切换回去)

你第一次安装时,ingress controller是LoadBalancer类型,EXTERNAL-IP显示<pending>——别担心,Docker for Mac Edge版本会自动把LoadBalancer服务映射到localhost,只是需要等一小会儿让集群完成配置。你可以用命令kubectl --namespace default get services -o wide -w washing-jackal-nginx-ingress-controller实时监控状态,等EXTERNAL-IP变成localhost或具体IP后,直接用这个IP+80/443端口访问就行。

额外提示:用域名访问更便捷

如果不想每次都输入端口,你可以在Ingress资源里设置一个本地域名(比如local.myapp.com),然后修改Mac上的/etc/hosts文件,把这个域名指向127.0.0.1,这样就能直接用http://local.myapp.com访问你的服务,体验和线上环境更接近。


你提供的安装步骤与输出参考:
安装命令:helm install stable/nginx-ingress
安装输出:

NAME: washing-jackal
LAST DEPLOYED: Thu Jan 18 12:57:40 2018
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME DATA AGE
washing-jackal-nginx-ingress-controller 1 1s

==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
washing-jackal-nginx-ingress-controller LoadBalancer 10.105.122.1 <pending> 80:31494/TCP,443:32136/TCP 1s
washing-jackal-nginx-ingress-default-backend ClusterIP 10.103.189.14 <none> 80/TCP 1s

==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
washing-jackal-nginx-ingress-controller 1 1 1 0 0s
washing-jackal-nginx-ingress-default-backend 1 1 1 0 0s

==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
washing-jackal-nginx-ingress-controller-5b4d86c948-xxlrt 0/1 ContainerCreating 0 0s
washing-jackal-nginx-ingress-default-backend-57947f94c6-h4sz6 0/1 ContainerCreating 0 0s

NOTES:
The nginx-ingress controller has been installed. It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w washing-jackal-nginx-ingress-controller'

An example Ingress that makes use of the controller:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: example
  namespace: foo
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - backend:
          serviceName: exampleService
          servicePort: 80
        path: /
  # This section is only required if TLS is to be enabled for the Ingress
  tls:
  - hosts:
    - www.example.com
    secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
apiVersion: v1
kind: Secret
metadata:
  name: example-tls
  namespace: foo
data:
  tls.crt: <base64 encoded cert>
  tls.key: <base64 encoded key>
type: kubernetes.io/tls

内容的提问来源于stack exchange,提问作者Chris G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:43:46