【问题标题】:Can not access web app on the network running kubernetes and minikube无法访问运行 kubernetes 和 minikube 的网络上的 Web 应用程序
【发布时间】:2021-10-09 01:55:49
【问题描述】:

我有一个运行基本前端 Angular 应用程序的 docker 容器。我已经验证它运行没有问题,并且我可以在浏览器中使用docker run -p 5901:80 formbuilder-stand-alone-form 成功访问 Web 应用程序。

我能够在我的云开发服务器上使用 minikube 和 kubernetes 成功部署它

apiVersion: v1
kind: Service
metadata:
  name: stand-alone-service

spec:
  selector:        
    app: stand-alone-form
  
  ports:
    - protocol: TCP
      port: 5901
      targetPort: 80
  
  type: LoadBalancer
---
apiVersion: apps/v1

kind: Deployment

metadata:
  name: stand-alone-form-app
  labels:               
    app: stand-alone-form
spec:                   
  replicas: 1           
  
  selector:
    matchLabels:
      app: stand-alone-form

  template:
    metadata:
      labels:
        app: stand-alone-form
    
    spec:
      containers:
      - name: stand-alone-form-pod
        image: formbuilder-stand-alone-form
        imagePullPolicy: Never
        ports:                
        - containerPort: 80
one@work ...github/stand-alone-form-builder-hhh/form-builder-hhh (main)
% kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
stand-alone-form-app-6d4669f569-vsffc   1/1     Running   0          6s
one@work ...github/stand-alone-form-builder-hhh/form-builder-hhh (main)
% kubectl get deployments
NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
stand-alone-form-app   1/1     1            1           8s
one@work ...github/stand-alone-form-builder-hhh/form-builder-hhh (main)
% kubectl get services   
NAME                  TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes            ClusterIP      10.96.0.1       <none>        443/TCP          5d7h
stand-alone-service   LoadBalancer   10.96.197.197   <pending>     5901:30443/TCP   21s

但是,我无法通过 url 访问它:

one@work ...github/stand-alone-form-builder-hhh/form-builder-hhh
%  minikube service stand-alone-service 
|-----------|---------------------|-------------|---------------------------|
| NAMESPACE |        NAME         | TARGET PORT |            URL            |
|-----------|---------------------|-------------|---------------------------|
| default   | stand-alone-service |        5901 | http://192.168.49.2:30443 |
|-----------|---------------------|-------------|---------------------------|

在这个例子中,http://192.168.49.2:30443/ 给了我一个死网页。

我禁用了所有 iptables 以进行故障排除。

知道如何访问前端网络应用程序吗?我在想我可能把选择器弄错了,但可以肯定。

更新:这是请求的新输出:

one@work ...github/stand-alone-form-builder-hhh/form-builder-hhh (main)
% kubectl describe service stand-alone-service
Name:                     stand-alone-service
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=stand-alone-form
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.96.197.197
IPs:                      10.96.197.197
LoadBalancer Ingress:     10.96.197.197
Port:                     <unset>  5901/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30443/TCP
Endpoints:                172.17.0.2:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
one@work ...github/stand-alone-form-builder-hhh/form-builder-hhh (main)
% minikube tunnel
Password: 
Status: 
    machine: minikube
    pid: 237498
    route: 10.96.0.0/12 -> 192.168.49.2
    minikube: Running
    services: [stand-alone-service]
    errors: 
        minikube: no errors
        router: no errors
        loadbalancer emulator: no errors

注意:我注意到隧道现在确实有一个负载均衡器的外部 IP:

one@work ...github/stand-alone-form-builder-hhh/form-builder-hhh (main)
% kubectl get service   
NAME                  TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
kubernetes            ClusterIP      10.96.0.1       <none>          443/TCP          5d11h
stand-alone-service   LoadBalancer   10.98.162.179   10.98.162.179   5901:31596/TCP   3m10s

【问题讨论】:

  • 服务接线看起来是正确的,但要仔细检查,你能kubectl describe service stand-alone-service吗?特别是在最后你应该看到一行写着Endpoints:,它不应该说“无”。

标签: docker kubernetes minikube


【解决方案1】:

您的 LoadBalancer 似乎没有完全正确解析,因为外部 IP 仍标记为 &lt;pending&gt;

根据 Minikube 的说法,当隧道丢失时会发生这种情况: https://minikube.sigs.k8s.io/docs/handbook/accessing/#check-external-ip

您是否尝试过在单独的命令窗口中运行 minikube tunnel

【讨论】:

  • 好主意。我试过了......但仍然没有成功并获得死网页。我用命令的输出更新了帖子
  • 只是想提一下……在隧道运行的情况下,我确实看到了负载均衡器的 IP 地址,而不是挂起的。虽然仍然无法访问我的网络应用程序。我尝试使用外部 ip 但仍然没有运气
  • 有趣,是的,我希望您能够在隧道运行的情况下使用192.168.49.2:5901 上的服务。当你说“获取死网页”时,你能定义你的意思吗?你可能有这个 cURL 结果吗?
  • % curl 192.168.49.2:31073 导致 curl: (7) 无法连接到 192.168.49.2 端口 31073:连接被拒绝
  • 很高兴它可以在需要的地方为您工作,但不太确定可能存在什么潜在问题。您是否在 Minikube 集群上启用了入口插件? (不需要它,只是想知道在干扰方面是否值得一看
猜你喜欢
  • 2021-01-03
  • 2020-02-01
  • 2021-07-24
  • 2022-08-24
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 2021-06-22
相关资源
最近更新 更多