k8s本地部署,访问不到怎么办?

我用自己的mac,装了docker,并在docker的dashboard中装了k8s,如下:
image.png
docker版本
image.png
k8s版本
image.png
我自己搞了个简单nodejs后端服务,放进docker部署,浏览器访问效果如下
image.png
curl访问
image.png
我配置了k8s的deployment和service,如下:

deployment

apiVersion: apps/v1
kind: Deployment
metadata:
    name: web-server
    namespace: test
    labels:
        deploy: nodejs-server
spec:
    selector:
        matchLabels:
            pod: nodejs-web-server
    replicas: 1
    revisionHistoryLimit: 1
    progressDeadlineSeconds: 60
    strategy:
        rollingUpdate:
            maxSurge: 50%
            maxUnavailable: 1
        type: RollingUpdate
    template: # 定义pod
        metadata:
            labels:
                pod: nodejs-web-server
        spec:
            containers:
                - name: web-service-server
                  image: web-service-image
                  imagePullPolicy: IfNotPresent
                  ports:
                      - containerPort: 8081
            restartPolicy: Always

service

apiVersion: v1
kind: Service
metadata:
    name: node-server
    namespace: test
    labels:
        service: service-test
spec:
    selector:
        pod: nodejs-web-server
    type: ClusterIP
    ports:
        - name: server-port
          protocol: TCP
          targetPort: 8081 #pod对外暴露的端口
          port: 8881 #service监听的端口

deployment信息
image.png
pod信息:
image.png
service信息
image.png
按理来说现在我使用curl命令访问clusterip是可以访问到的,但是:
image.png
浏览器也访问失败,我又配置了一下ingress试了一下
ingress配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
    name: test-ingress
    namespace: test
spec:
    rules:
        - host: test.test.com
          http:
              paths:
                  - path: /
                    pathType: Prefix
                    backend:
                        service:
                            name: node-server
                            port:
                                number: 8881

我在另外一个windows电脑上改了host文件,能访问到我的mac,但是访问test.test.com还是访问不了!
现在怀疑两个可能的问题,一个可能是我的deployment和service配置没写对,另一个就是网络问题,也有可能是在docker的dashboard中装的k8s有问题(但这个不应该啊)。总之改了很多次配置试了很多次,就是通不了,求大神帮忙看看!谢谢!!!

阅读 1.4k
2 个回答

service的ClusterIP改成NodePort就好了,ClusterIP是集群内部访问的

首先上一位回答有效,NodePort 是要改的,设置了 NodePort 才能将端口固定到对应的 Node 上。然后跟 Ingress 没关系,Service 肯定是可以的。

然后是你的问题,由于 mac 上的 docker 和 linux 不一样,没有 docker0 网桥,是虚拟机。所以你用 docker 桌面端 k8s 的节点也是类似的道理,它并不是将你的宿主机作为一个 node,也不是将端口绑定到宿主机。所以你通过 localhost 肯定访问不到,内网 ip 的 10.100.37.38 是集群内的 ip 由于是虚拟机你肯定也访问不到。

所以你需要 k8s 提供的 Port Forwarding 也就是端口转发。

kubectl port-forward service/simpleservice 8080:80
curl localhost:8080/info

理论上你只要能用 kubectl 操作,那就能通过 Port Forwarding 转发到本地来访问

参考链接:

最后,再提一个建议,我觉得你应该是在学习 k8s 吧,不是很建议使用 docker 自带的客户端安装来学习 k8s,建议使用 k3s 或者 minikube 来做实验可能会少走一些弯路。而且最好还是单独弄一台 linux 机器来做实验(虚拟机也可以)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏