1

鉴于以下 K8s 资源(部署/pod、服务、入口),我希望在浏览器中访问时看到请求回显给我https://staging-micro.local/。我得到的是502 Bad Gateway.

# describe deployment (trunc. to show only containers)
Containers:
   cloudsql-proxy:
    Image:      gcr.io/cloudsql-docker/gce-proxy:1.11
    Port:       <none>
    Host Port:  <none>
    Command:
      /cloud_sql_proxy
      -instances=myproject:us-central1:project-staging=tcp:5432
      -credential_file=/secrets/cloudsql/credentials.json
    Environment:  <none>
    Mounts:
      /secrets/cloudsql from cloudsql-instance-credentials-volume (ro)
   adv-api-django:
    Image:      gcr.io/google_containers/echoserver:1.9
    Port:       8000/TCP
    Host Port:  0/TCP
    Environment:


# describe service
Name:                     staging-adv-api-service
Namespace:                staging
Labels:                   app=adv-api
                          platformRole=api
                          tier=backend
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"adv-api","platformRole":"api","tie...
Selector:                 app=adv-api-backend,platformRole=api,tier=backend
Type:                     LoadBalancer
IP:                       10.103.67.61
Port:                     http  80/TCP
TargetPort:               8000/TCP
NodePort:                 http  32689/TCP
Endpoints:                172.17.0.14:8000,172.17.0.6:8000,172.17.0.7:8000
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>


# describe ingress
Name:             staging-api-ingress
Namespace:        staging
Address:          10.0.2.15
Default backend:  default-http-backend:80 (172.17.0.12:8080)
Rules:
  Host                 Path  Backends
  ----                 ----  --------
  staging-micro.local  
                       /   staging-adv-api-service:http (172.17.0.14:8000,172.17.0.6:8000,172.17.0.7:8000)

请注意,我在主机(运行 minikube)上有条目192.168.99.100 staging-micro.local/etc/hosts这是正确的minikube ip. 如果我删除该服务,点击staging-micro.local/会给出404 Not Found默认后端的响应。

我的期望是 Ingress 将主机名staging-micro.local和路径映射/到正在侦听端口 80 的服务。然后该服务将请求转发到端口 8000 上的 3 个选定容器之一。 echoserver 容器正在侦听端口 8000,并返回一个以请求为主体的 HTTP 响应。当然,这不是实际发生的情况。

最后,cloudsql-proxy容器:此时不应涉及,但我将其包括在内是因为我想在 sidecar 容器存在时验证服务是否有效。然后我可以换掉echoserver我的主应用程序容器。我已经echoserver删除了测试,并得到了相同的结果。

日志显示echoserver正在启动而没有错误。

我无法找到任何更全面的文档,echoserver因此我不是 100% 了解它正在侦听的端口。

4

1 回答 1

2

我猜你使用了错误的echoserver:1.9目标容器端口,因为它8080默认在端口上响应。看看这个例子

我已经在我的环境中对它进行了测试,并在8080端口上成功地响应了容器。

于 2019-07-24T09:36:55.837 回答