首页 > 解决方案 > 在使用 Kubernetes 部署的浏览器上看不到我的应用

问题描述

希望你们一切都好!

我需要在浏览器上查看我的应用程序,但我相信我在这里遗漏了一些东西,希望你能帮助我。

[root@kubernetes Docker]# kubectl get all
NAME                           READY   STATUS    RESTARTS   AGE
pod/my-app2-56d5c786dd-n7mqq   1/1     Running   0          19m
pod/nginx-86c57db685-bxkpl     1/1     Running   0          13h

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        31h
service/my-app2      ClusterIP   10.101.108.199   <none>        8085/TCP       12m
service/nginx        NodePort    10.106.14.144    <none>        80:30525/TCP   13h

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-app2   1/1     1            1           19m
deployment.apps/nginx     1/1     1            1           13h

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/my-app2-56d5c786dd   1         1         1       19m
replicaset.apps/nginx-86c57db685     1         1         1       13h

总的来说,您可以看到一切正常,对我来说看起来一样。

要在我的浏览器上打开它,我使用的是分配容器的从节点的 IP 地址。在我的应用程序上,我正在像这样映射 Hello @RequestMapping("/Hello") 在我的 dockerfile 上构建我的图像,我使用了这个:

[root@kubernetes project]# cat Dockerfile
FROM openjdk:8
COPY microservico-0.0.1-SNAPSHOT.jar microservico-0.0.1-SNAPSHOT.jar
#WORKDIR /usr/src/microservico-0.0.1-SNAPSHOT.jar
EXPOSE 8085
ENTRYPOINT ["java", "-jar", "microservico-0.0.1-SNAPSHOT.jar"]

所以最后,我认为我需要以这种方式调用我的应用程序。

---> ip:8085/你好

[root@kubernetes project]# telnet kubeslave 8085
Trying 192.168.***.***...
telnet: connect to address 192.168.***.***: Connection refused

但我还是什么都没看到……

这是我的部署和服务:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app2
  labels:
    app: app
spec:
  selector:
    matchLabels:
      app: app
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: app
        role: master
        tier: backend
    spec:
      containers:
      - name: appcontainer
        image: *****this is ok*****:my-java-app
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 8085


apiVersion: v1
kind: Service
metadata:
  name: my-app2
  labels:
    app: app
    role: master
    tier: backend
spec:
  ports:
  - port: 8085
    targetPort: 8085
  selector:
    app: app
    role: master
    tier: backend

标签: dockerkubernetes

解决方案


您已经创建了一个 ClusterIP(默认)类型的服务。此类服务仅适用于从 kubernetes 集群内部访问。要从浏览器访问它,您需要通过LoadBalancerNodeport服务公开 pod。LoadBalancer 仅在您是受支持的公共云之一时才有效,否则需要使用 Nodeport。

https://kubernetes.io/docs/tutorials/stateless-application/expose-external-ip-address/

https://kubernetes.io/docs/tasks/access-application-cluster/service-access-application-cluster/

除了使用服务之外,您还可以使用 kubectl 代理来访问它。

如果您在 Minikube 上,请按照此操作

https://kubernetes.io/docs/tutorials/hello-minikube/


推荐阅读