【问题标题】:Kubernetes Ingress Controller GPC GKE can't reach the siteKubernetes Ingress Controller GPC GKE 无法访问站点
【发布时间】:2020-11-15 12:17:57
【问题描述】:

Kubernetes Ingress Controller 无法访问该站点

您好,这是我第一次尝试使用 kubernetes 部署应用程序。我面临的问题是我希望能够将子域与我的 svc 链接,但是当我尝试导航到我得到的链接时

无法访问此网站

我将解释我为这些所做的步骤,可能我有什么问题或遗漏

  1. 我在谷歌云平台上安装了ingress-controller

  2. 在 GCP 中 -> 网络服务 -> 云 DNS

    一个。我用 google dns 指向 testcompany.com

    b.我从上一步“ingress-nginx-controller”创建了一条指向公共IP的A记录

  3. 我的 svc 清单

    apiVersion: v1
    kind: Service
    metadata:
      namespace: staging
      name: testcompany-svc
      labels:
        app: testcompany-svc
    spec:
      type: NodePort
      ports:
        - name: test-http
          port: 80
          protocol: TCP
          targetPort: 3001
      selector:
        app: testcompany
    
  4. 我的入口清单

    apiVersion: networking.k8s.io/v1beta1
    
      - host: api.testcompany.com
        http:
          paths:
          - backend:
              serviceName: testcompany-svc
              servicePort: test-http
    

一切都是绿色的,它似乎正在工作,但是当我尝试访问该网址时,我得到了This site can’t be reached


更新 1

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: staging
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: front.stagingtestcompany.com
    http:
      paths:
      - backend:
          serviceName: testcompanyfront-svc
          servicePort: testcompanyfront-http

  - host: api.stagingtestcompanysrl.com
    http:
      paths:
      - backend:
          serviceName: testcompanynodeapi-svc
          servicePort: testcompanyapi-http

【问题讨论】:

  • 您可以在内部调用您的服务吗?您可以使用节点的内部 IP 地址和节点端口来检查它。另外,请确保 pod 有一个容器正在侦听您的 TCP 端口 3001。最后一件事,您的节点端口范围是在 30000-32767 之间还是您自定义它?通过运行此命令获取更多信息,Kubectl get service -o yaml
  • 您是否尝试直接访问公共 IP 而不是主机名?使用 curl,您可以像这样设置主机 curl -H "Host: api.testcompany.com" <IP> 以避免 DNS 延迟或配置错误
  • 你安装了什么ingress-controller?你能提供链接吗?是 ingress-nginx 还是 kubernetes-ingress ?您能否也分享您的整个ingress 清单,以便我们可以看到所有注释等? +1 对上述问题。直接curl服务IP是否正常?
  • @Milad 感谢您的评论。来自 nodeport 的端口在默认范围之间。在本地它正在工作,但我在本地没有域。感谢您的评论,它很有用!
  • @guillaumeblaquiere 感谢您的评论。如果我尝试访问 ingress-nginx-controller 外部 ip,我得到了 404。

标签: google-cloud-platform google-kubernetes-engine kubernetes-ingress nginx-ingress gke-networking


【解决方案1】:

您应该按顺序检查:

  1. 您的 Service、Pod、Ingress 在同一个命名空间中:kubectl get all -n staging
  2. 您的 Pod 正在侦听端口 3001:如果可以,请在本地运行它,或者使用 kubectl port-forward pods/[pod-name] -n staging 3001:3001 并在本地尝试使用 http://localhost:3001/...
  3. 您的服务正在正确到达您的 Pod:使用 kubectl port-forward service/testcompany-svc -n staging 3001:3001 并在本地尝试使用 http://localhost:3001/...
  4. 在您发布之前检查任何其他 Ingress 规范规则
  5. 检查您的 VPC 网络中的防火墙规则,它们应该允许来自 Google LB 的流量

【讨论】:

  • 感谢您对第 3 步的回答一切正常,我应该检查入口规范规则和防火墙。谢谢
  • 谢谢@FaustoFusaro,您的回答对分析所有内容非常有帮助。我缺少的是在 CGP 网络 DNS 中设置子域。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多