gpt4 book ai didi

google-kubernetes-engine - Istio 503 :s between (Public) Gateway and Service

转载 作者:行者123 更新时间:2023-12-04 14:17:48 27 4
gpt4 key购买 nike

我一直在玩弄我的 Istio 集群配置,但最终陷入了无法调试的状态。

我有配置了公共(public) IP 的 SDS+网关。我已经在端口 5000 上部署了 Istio HelloWorld 应用程序。我可以:

  • 执行到 istio-proxyhelloworld-[rnd] pods 和 curl localhost:5000/hello - 这很好用
  • 查看 istioctl proxy-config cluster (等等)来自 https://istio.io/docs/ops/troubleshooting/network-issues/https://istio.io/docs/ops/troubleshooting/proxy-cmd/ — 一切正常,SYNC:ed 等
  • 我可以做 kubectl exec istio-ingressgateway-[rnd] /bin/bash然后 curl helloworld.mynamespace:5000/hello成功(它返回 Hello version: v2 ...

  • 但是在查询其公开绑定(bind)的 IP 时,我无法使 ingressgateway 实际上返回 503 以外的任何内容。如果我在没有 /hello 的情况下查询路径,它返回 404相反,它显然试图路由到 helloworld服务/部署和失败。

    所以我现在可以联系我的 helloworld来自 Istio Ingress Gateway 的服务,当询问网关本身时 curl localhost/hello -i ,或者我们这边的网络 curl -i http://35.x.y.z/hello我总是收到 503 Service Unavailable Back
    我没有任何适用于 helloworld 的 DestinationRule 或政策,我在严格的 mTLS 中有 Istio。

    我以前可以通过入口网关访问(其他)服务,但后来我开始清理事情(直到我只有 helloworld 服务 VirtualService+Gateway 而没有其他服务),现在它不起作用。应该可以调试。

    怎么了?

    不相关(我可以说):
  • Kubernetes Istio ingress gateway responds with 503 always (我没有 clusterIP:无)
  • Accessing service using istio ingress gives 503 error when mTLS is enabled (在 k exec -c istio-proxy helloworld-[rnd] -- curl http://localhost:15000/logging?level=true 之后,istio-proxy 特使根本没有收到来自 istio-ingressgateway 的任何调用;流量永远不会离开入口 pod,与这个问题不同)
  • 我启用了 CNI + GKE 网络策略(但关闭它没有帮助)并且 Calico-allow-all 规则没有帮助,所以它不应该是这样;另外,我可以从 ingressgateway curl ,所以有连接性
  • https://github.com/istio/istio/tree/master/samples/helloworld — 配置
  • 最佳答案

    首先将 curl 与 SDS 网关一起使用您需要按照 Istio documentation 中的描述使用它.

    $ curl -v -HHost:httpbin.example.com \
    --resolve httpbin.example.com:$SECURE_INGRESS_PORT:$INGRESS_HOST \
    --cacert httpbin.new.example.com/2_intermediate/certs/ca-chain.cert.pem \
    https://httpbin.example.com:$SECURE_INGRESS_PORT/status/418
    ...
    HTTP/2 418
    ...
    -=[ teapot ]=-

    _...._
    .' _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
    | ;/
    \_ _/
    `"""`

    其次根据 Istio使用严格 mTLS(双向 TLS)身份验证策略的文档要求两个服务都运行 TLS 通信。在您的情况下,您正在尝试使用使用 TLS 的 Istio 访问纯文本 (HTTP) 服务。这会导致相互 TLS 配置冲突。

    您可以使用 istioctl 进行验证 this 中的命令文档部分:

    The istioctl command provides an option for this purpose. You can do:

    $ istioctl authn tls-check $CLIENT_POD httpbin.default.svc.cluster.local
    HOST:PORT                                  STATUS     SERVER     CLIENT     AUTHN POLICY        DESTINATION RULE
    httpbin.default.svc.cluster.local:8000 OK mTLS mTLS default/ default/istio-system

    Where $CLIENT_POD is the ID of one of the client service’s pods.

    Refer to Verify mutual TLS configuration for more information.



    要解决此问题,必须为此服务关闭 mTLS,以便 Istio 接受从纯文本到 TLS 服务的连接。关注此 guide创建允许指定服务进行非 TLS 通信的目标规则

    要确认这是导致此问题的原因,您可以暂时启用 Permissive模式。

    编辑:

    来自您在上一个部署文件中提供的链接 helloworld.yaml没有 targetPort这就是为什么 nginx 无法访问的原因。

    这是它的外观:
    apiVersion: v1
    kind: Service
    metadata:
    name: helloworld
    labels:
    app: helloworld
    spec:
    ports:
    - port: 5000
    name: http
    targetPort: 80
    selector:
    app: helloworld
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: helloworld-v1
    labels:
    version: v1
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: helloworld
    version: v1
    template:
    metadata:
    labels:
    app: helloworld
    version: v1
    spec:
    terminationGracePeriodSeconds: 0
    containers:
    - name: helloworld
    image: docker.io/istio/examples-helloworld-v1
    resources:
    requests:
    cpu: "100m"
    imagePullPolicy: IfNotPresent #Always
    ports:
    - containerPort: 5000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: helloworld-v2
    labels:
    version: v2
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: helloworld
    version: v2
    template:
    metadata:
    labels:
    app: helloworld
    version: v2
    spec:
    terminationGracePeriodSeconds: 0
    containers:
    - name: helloworld
    image: docker.io/istio/examples-helloworld-v2
    resources:
    requests:
    cpu: "100m"
    imagePullPolicy: IfNotPresent #Always
    ports:
    - containerPort: 5000

    关于google-kubernetes-engine - Istio 503 :s between (Public) Gateway and Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58509666/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com