【发布时间】:2020-11-15 12:17:57
【问题描述】:
Kubernetes Ingress Controller 无法访问该站点
您好,这是我第一次尝试使用 kubernetes 部署应用程序。我面临的问题是我希望能够将子域与我的 svc 链接,但是当我尝试导航到我得到的链接时
无法访问此网站
我将解释我为这些所做的步骤,可能我有什么问题或遗漏
-
我在谷歌云平台上安装了
ingress-controller -
在 GCP 中 -> 网络服务 -> 云 DNS
一个。我用 google dns 指向 testcompany.com
b.我从上一步“ingress-nginx-controller”创建了一条指向公共IP的A记录
-
我的 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 -
我的入口清单
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