无法访问Kubernetes中的服务

时间:2019-10-03 13:24:23

标签: kubernetes

我有此网络服务器配置:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: webserver
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: webserver
    spec:
      containers:
      - name: webserver
        image: nginx:alpine
        ports:
        - containerPort: 80
        volumeMounts:
        - name: hostvol
          mountPath: /usr/share/nginx/html
      volumes:
      - name: hostvol
        hostPath:
          path: /home/docker/vol

和此Web服务配置:

apiVersion: v1
kind: Service
metadata:
  name: web-service
  labels:
    run: web-service
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: webserver

我希望能够使用此配置通过http://192.168.99.100:80连接到Web服务器,但是Chrome给了我ERR_CONNECTION_REFUSED

我尝试了minikube service --url web-service,它给出了http://192.168.99.100:30276,但是它也有一个ERR_CONNECTION_REFUSED

还有其他建议吗?

更新

我将端口/ targetPort更新为80。

但是,我现在得到:

ERR_CONNECTION_REFUSED for http://192.168.99.100:80/

用于http://192.168.99.100:31540/的nginx 403

4 个答案:

答案 0 :(得分:0)

在您的服务中,您没有指定targetPort,因此该服务使用port值作为targetPort,但是您的容器正在侦听80。向该服务中添加一个targetPort: 80

答案 1 :(得分:0)

NodePort端口范围介于30000-32767(默认)之间。当您在未指定端口的情况下公开服务时,kubernetes将从上述范围内随机选择一个端口并为您提供服务。

您可以通过键入以下命令来检查端口

kubectl get svc

在您的情况下-该应用程序已端口转发到31540。您的问题似乎是niginx配置。检查nginx日志。

答案 2 :(得分:0)

在您的服务中,您可以定义一个nodePort

apiVersion: v1
kind: Service
metadata:
  name: web-service
  labels:
    run: web-service
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 32700
    protocol: TCP
  selector:
    app: webserver

现在,您将可以在http://:32700

上对其进行访问

请注意端口80。理想情况下,您将在端口80上运行一个nginx入口控制器,所有流量都将通过该端口进行路由。使用端口80作为nodePort会破坏您的部署。

答案 3 :(得分:0)

请检查已安装卷 / home / docker / vol

的权限

要解决此问题,必须使安装的目录及其内容公开可读:

chmod -R o + rX / home / docker / vol