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

如何让局域网内其他机器通过子域名访问MicroK8s应用

问题解决步骤

一、核心问题定位

你遇到的DNS_PROBE_FINISHED_NXDOMAIN是局域网其他设备无法解析子域名导致的;而访问my-hostname.local返回myapp1内容,是因为无匹配Host规则时,K8s会路由到第一个创建的Ingress资源。


二、解决DNS解析问题

1. 临时方案:单设备hosts映射

在局域网其他机器的hosts文件中添加子域名与MicroK8s机器IP的映射:

  • Windows路径:C:\Windows\System32\drivers\etc\hosts(需管理员权限编辑)
  • Linux/macOS路径:/etc/hosts(执行sudo nano /etc/hosts编辑)

添加内容(替换<MicroK8s机器局域网IP>为实际IP):

<MicroK8s机器局域网IP> app1.my-hostname.local
<MicroK8s机器局域网IP> app2.my-hostname.local

2. 长期方案:局域网DNS配置

如果你的路由器支持自定义DNS记录(多数家用路由器有「静态DNS」「域名解析」选项),添加两条A记录:

  • 主机名:app1,域名:my-hostname.local,指向IP:<MicroK8s机器局域网IP>
  • 主机名:app2,域名:my-hostname.local,指向IP:<MicroK8s机器局域网IP>

三、修正Ingress配置

将现有Ingress的Host规则替换为你需要的app1.my-hostname.local和app2.my-hostname.local:

myapp1的Ingress配置(更新后)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    app: myapp1
  name: myapp1-ingress
spec:
  ingressClassName: public
  rules:
    - host: myapp1.localhost
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp1
                port:
                  number: 80
    # 新增目标子域名规则
    - host: app1.my-hostname.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp1
                port:
                  number: 80

myapp2的Ingress配置(更新后)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    app: myapp2
  name: myapp2-ingress
spec:
  ingressClassName: public
  rules:
    - host: myapp2.localhost
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp2
                port:
                  number: 80
    # 新增目标子域名规则
    - host: app2.my-hostname.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: myapp2
                port:
                  number: 80

应用更新后的配置:

microk8s kubectl apply -f myapp1-ingress.yaml
microk8s kubectl apply -f myapp2-ingress.yaml

四、验证Ingress控制器状态

  1. 确认Ingress addon已启用:
microk8s status

若ingress未显示enabled,执行启用命令:

microk8s enable ingress
  1. 测试Ingress规则有效性(在MicroK8s机器上执行):
# 验证app1规则
curl -H "Host: app1.my-hostname.local" http://localhost
# 验证app2规则
curl -H "Host: app2.my-hostname.local" http://localhost

分别返回对应应用内容,说明规则配置正确。


五、优化:解决根域名默认路由问题

若不想让my-hostname.local默认返回myapp1内容,可添加一个默认Ingress,设置无匹配时返回404:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: default-ingress
spec:
  ingressClassName: public
  defaultBackend:
    service:
      name: default-http-backend
      port:
        number: 80

若没有default-http-backend服务,可创建一个简单的404服务,或忽略此步骤(不影响子域名访问)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:35:13