如何通过RESTful后端将vuejs集成到minikube中?

时间:2018-10-10 12:22:20

标签: docker vue.js kubernetes minikube

我想将vuejs应用程序集成到minikube集群中。

我将VueJs教程中的Dockerfile用于Nginx Web服务器和第一个选项localhost:8080 here的生产中。我相应地将yml文件中的端口更改为localhost,将其更改为8080,将nginx版本(如下所示)更改为80

然后在我的config/index.js

  dev: {

 [...]
    host: 'localhost', // can be overwritten by process.env.HOST
    port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    autoOpenBrowser: false,
    errorOverlay: true,
    notifyOnErrors: true,
    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
[...]
}, 

我已经设置了默认的8080端口。对于我的minikube部署和服务,我添加了

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: vuejs
spec:
  selector:
    matchLabels:
      app: vuejs
      tier: frontend
  replicas: 1
  template:
    metadata:
      labels:
        app: vuejs
        tier: frontend
    spec:
      imagePullSecrets:
      - name: regcred
      containers:
        - name: vuejs
          image: <secret registry> 
          ports:
            - containerPort: 80
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
---
apiVersion: v1
kind: Service
metadata:
  name: vuejs
  labels:
    app: vuejs
    tier: frontend
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80
  # Replace with the IP of your minikube java / master java
  # externalIPs:
  #  - 192.168.99.105 
  selector:
    app: vuejs
    tier: frontend

如何连接到vuejs / nginx Web服务器。此外,由于我将后端的DNS名称设置为java,因此如何在vuejs中设置Java REST API地址? 我将地址设置为'http://java:8080/',但没有任何响应。 Java REST后端已与this yml集成到minikube中。

古玩问题是,启动vuejs部署后,我可以在127.0.0.1:8080上访问vuejs应用程序。当我正确理解时,我认为kubernetes集群开放了自己的网络,并且只能通过外部IP进行访问

看看我的kubectl get all,我会说vuejs应该可以访问192.168.99.105:8080-当使用没有nginx的dockerimage时。

NAME                         READY   STATUS    RESTARTS   AGE
pod/java-fbf949cbc-rqstq     0/1     Error     4          2d
pod/maria-7b67c8ddf-xp8xx    1/1     Running   2          2d
pod/private-reg              1/1     Running   5          5d
pod/vuejs-5f4c657d74-885j9   1/1     Running   1          18h
NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
service/java         LoadBalancer   10.101.207.98   192.168.99.100   8080:31011/TCP   2d
service/kubernetes   ClusterIP      10.96.0.1       <none>           443/TCP          5d
service/maria        ClusterIP      10.99.177.228   <none>           3306/TCP         2d
service/vuejs        NodePort       10.104.108.44   192.168.99.105   8080:30001/TCP   17h
NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/java    1         1         1            0           2d
deployment.apps/maria   1         1         1            1           2d
deployment.apps/vuejs   1         1         1            1           18h
NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/java-fbf949cbc     1         1         0       2d
replicaset.apps/maria-7b67c8ddf    1         1         1       2d
replicaset.apps/vuejs-5f4c657d74   1         1         1       18h

2 个答案:

答案 0 :(得分:1)

您可以使用minikube service命令将URL公开给您自己的主机。对于您的部署,请尝试:

minikube service vuejs --url

它将显示一个IP,其中添加了NodePort。复制该命令的结果并将其粘贴到浏览器中。

更新:如何工作

Minikube使用单节点Kubernetes集群在主机(笔记本电脑)中启动虚拟机,并分配一个可以使用minikube ip命令获得的本地IP。这就是Kubernetes节点的IP。

当您在Kubernetes中公开“ NodePort”服务时,它会分配一个范围为30000-32767(默认)的静态端口,以便您可以使用<NodeIP>:<NodePort>

访问该服务。

答案 1 :(得分:0)

有两种方法可以公开Kubernetes集群中的资源:

  1. 使用Ingress。有关更多信息,您可以访问此link

  2. 暴露一个Service。您可以通过两种方式做到这一点:

    • 类型:LoadBalancer 。但是,它仅适用于云提供商。

    • 类型:NodePort 。这是最简单的方法,您需要在服务的YAML描述中将spec.typeLoadBalancer更改为NodePort。之后,要访问Kubernetes集群内部的服务,您需要使用节点的IP地址和字段nodePort中的端口。例如,192.168.12.34:30001