Knative部署的pod最初无法通过浏览器访问,但是在k8s集群中执行curl命令之后,我可以在浏览器中访问

时间:2019-10-25 06:28:20

标签: knative

我想在不执行curl命令的情况下第一次访问浏览器,请注意-初始命令(如导出IP地址和config-map命令)成功执行。

apiVersion: serving.knative.dev/v1alpha1 
kind: Service
metadata:
  name: helloworld-go # The name of the app
  namespace: default # The namespace the app will use
spec:
  runLatest:
    configuration:
      revisionTemplate:
        spec:
          container:
            image: gcr.io/knative-samples/helloworld-go 
            env:
              - name: TARGET 
                value: "Go Sample v1"

我没有收到任何错误。我的期望是,当我使用浏览器请求URL时,pod希望自动创建。

1 个答案:

答案 0 :(得分:0)

使用Knative时,建议您将所有请求都通过Ingress网关进行路由,因此,请确保使用Knative提供的其他功能,例如自动缩放(如果将pod缩小为0)

下面的Kubernetes服务用作收集运行Pod的所有端点的一种机制。如果没有正在运行的Pod,则无法扩展,并且在没有后端的情况下将返回默认响应。

您遇到的问题就是这个,使用Kubernetes Service时没有Pod运行。您需要使用Ingress网关。为此,请执行以下命令以获取其IP:

kubectl get svc -n istio-system \
  -l app=istio-ingressgateway \
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'

并在浏览器中使用此IP。您将面临的直接问题是入口网关基于标头路由,而您缺少标头。因此,请安装chrome扩展程序,以便在请求中添加标头(我使用ModHeader)。

在chrome扩展程序中添加标题(在本例中为“ Host:helloworld.default.example.com”)之后,打开IP,即使它掉线了,也可以到达您的Pod。