首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kunbernetes入侵的上游超时(110:连接超时)

Kunbernetes入侵的上游超时(110:连接超时)
EN

Stack Overflow用户
提问于 2019-01-28 00:23:29
回答 1查看 9.4K关注 0票数 5

我已经设置了Kubernetes集群,作为其中的一部分,设置了一个入口规则,将流量转发到web服务器。

代码语言:javascript
复制
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: alpha-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
    - hosts:
        - alpha.example.com
      secretName: letsencrypt-prod
  rules:
    - host: alpha.example.com
      http:
        paths:
          - backend:
              serviceName: web
              servicePort: 80

最后,浏览器会出现504错误,我在in日志中看到

2019/01/27 23:45:38错误41#41:*4943上游超时(110:连接超时)从上游读取响应头,客户机: 10.131.24.163,服务器: alpha.example.com,请求:"GET / HTTP/2.0",上游:"http://10.244.93.12:80/",主机:"alpha.example.com“

我没有那个IP地址的任何服务..。

代码语言:javascript
复制
╰─$ kgs --all-namespaces                                                                                                                                                                                                                                                  130 ↵
NAMESPACE       NAME                            TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE
default         database                        ClusterIP      10.245.181.187   <none>           5432/TCP                     4d8h
default         kubernetes                      ClusterIP      10.245.0.1       <none>           443/TCP                      9d
default         user-api                        ClusterIP      10.245.41.8      <none>           9000/TCP                     4d8h
default         web                             ClusterIP      10.245.145.213   <none>           80/TCP,443/TCP               34h
ingress-nginx   ingress-nginx                   LoadBalancer   10.245.25.107    <external-ip>   80:31680/TCP,443:32324/TCP   50m
kube-system     grafana                         ClusterIP      10.245.81.91     <none>           80/TCP                       6d1h
kube-system     kube-dns                        ClusterIP      10.245.0.10      <none>           53/UDP,53/TCP,9153/TCP       9d
kube-system     prometheus-alertmanager         ClusterIP      10.245.228.165   <none>           80/TCP                       6d2h
kube-system     prometheus-kube-state-metrics   ClusterIP      None             <none>           80/TCP                       6d2h
kube-system     prometheus-node-exporter        ClusterIP      None             <none>           9100/TCP                     6d2h
kube-system     prometheus-pushgateway          ClusterIP      10.245.147.195   <none>           9091/TCP                     6d2h
kube-system     prometheus-server               ClusterIP      10.245.202.186   <none>           80/TCP                       6d2h
kube-system     tiller-deploy                   ClusterIP      10.245.11.85     <none>           44134/TCP                    9d

如果我看到入口舱上的resolv.conf文件,它会返回它应该.

代码语言:javascript
复制
╰─$ keti -n ingress-nginx nginx-ingress-controller-c595c6896-klw25 -- cat /etc/resolv.conf                                                                                                                                                                                130 ↵
nameserver 10.245.0.10
search ingress-nginx.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

dig/nslookup/host在该容器上不可用,但是如果我创建一个简单的busybox实例,它就可以使用相同的配置获得正确的IP:

代码语言:javascript
复制
╰─$ keti busybox -- nslookup web
Server:    10.245.0.10
Address 1: 10.245.0.10 kube-dns.kube-system.svc.cluster.local

Name:      web
Address 1: 10.245.145.213 web.default.svc.cluster.local

有人能告诉我下一步该做什么吗?

更新#1

以下是web的配置,正如注释中所要求的那样。我还在研究为什么不能直接使用集群内的wgetweb中获取任何东西。

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  labels:
    io.kompose.service: web
    app: web
  name: web
spec:
  ports:
  - name: "80"
    port: 80
    targetPort: 80
  - name: "443"
    port: 443
    targetPort: 443
  selector:
    io.kompose.service: web
status:
  loadBalancer: {}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        io.kompose.service: web
        app: web
    spec:
      containers:
      - image: <private docker repo>
        imagePullPolicy: IfNotPresent
        name: web
        resources: {}
      imagePullSecrets:
      - name: gcr
status: {}

更新2

根据迈克尔下面的评论,它为web解析的IP地址是它的端点之一:

代码语言:javascript
复制
╰─$ k get endpoints web                                                                                                                                                                                                                                                   130 ↵
NAME      ENDPOINTS                          AGE
web       10.244.93.12:443,10.244.93.12:80   2d
EN

回答 1

Stack Overflow用户

发布于 2019-01-28 21:30:07

因此,这一切归结为php服务没有任何端点,因为我错误地配置了服务选择器!

一些目光敏锐的读者可能已经注意到,我的配置是作为一个从docker-复合配置文件(我的dev环境)的转换开始的,我已经从那里构建了它。

问题的出现是因为我更改了部署的标签和选择器,而不是服务本身。

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: user-api
  labels:
    io.kompose.service: user-api
    app: user-api
spec:
  ports:
    - name: "9000"
      port: 9000
      targetPort: 9000
  selector:
    io.kompose.service: user-api
status:
  loadBalancer: {}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: user-api
  name: user-api
spec:
  replicas: 1
  selector:
    matchLabels:
      app: user-api
  template:
    metadata:
      labels:
        app: user-api
    spec:
... etc

您可以看到,我仍然使用为我创建的旧选择器,io.kompose.service: user-api而不是较新的app: user-api

我听从了@coderanger的建议,而nginx服务正在响应,php却没有响应。

快速查看一下将应用程序与服务连接的文档就会发现:

如前所述,服务由一组Pods支持。这些口袋妖怪通过端点暴露。将持续评估服务的选择器,结果将是指向Endpoint对象(也称为my-nginx )的POSTed。

当我检查服务和部署模板的选择器时,我发现它们是不同的,现在它们匹配了,一切都如预期的那样工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54394181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档