在本地主机上的k8s中公开集群

时间:2019-06-04 13:23:36

标签: kubernetes

因为docker支持开箱即用的kubernetes(在我的Mac上),所以我想尝试一下,看看是否可以对一个简单的Web服务进行负载均衡。为此,我创建了一个简单的映像,该映像公开了端口3000,并且仅返回Hello World。我创建了一个k8s配置yaml

apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
spec:
  type: NodePort
  externalIPs:
  - 192.168.2.85
ports:
  - port: 8080
    targetPort: 3000
selector:
  app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
        - name: hello-kubernetes
          image: hello/world:latest
          ports:
            - containerPort: 3000

应用

$> kubectl apply -f ./example.yaml

我看到3个吊舱正在运行,并且有服务

NAME               TYPE        CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGE
hello-kubernetes   NodePort    10.99.38.46     192.168.2.85   8080:30244/TCP   42m

我在上面使用了NodePort,但不确定是否也可以在这里使用Loadbalancer

无论如何,当我进入This site can’t be reached或`http://192.168.2.85:30244(我不知道要使用哪个端口)时,在浏览器中都会收到消息http://192.168.2.85:8080

所以,我想我已经接近了,但是我仍然错过了一些事情:(任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

端口号错误。

使用http://NODEIP:NODEPORT

根据您的情况,尝试

http://NODEIP:30244

答案 1 :(得分:1)

k explain service.spec.externalIPs
  

种类:服务版本:v1

     

字段:外部IP <[]字符串>

     

说明:        externalIPs是群集中节点将为其提供IP地址的列表        也接受此服务的流量。这些IP不受管理        Kubernetes。用户有责任确保流量到达        此IP的节点。一个常见的例子是外部负载均衡器        Kubernetes系统的一部分。

问题出在这里,我们不知道您的网络设置。这是Mac的minikube吗? 192.168.2.x网络适合您吗?在使用minikube的情况下,我要做的就是编辑externalIP以使其可以从我的网络访问。所以我要做的就是:

  • minikube IP在我的情况下为192.168.99.100(minikubeVM的IP地址)
  • 将外部IP更改为192.168.99.100

    k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-kubernetes NodePort 10.105.212.118 192.168.99.100 8080:32298/TCP 46m

我能够使用192.168.99.100:8080访问该应用程序。

还要注意,在您的情况下,您具有8081端口(但是我想P Ekambaram已经提到了这一点)。