gpt4 book ai didi

amazon-web-services - istio - 使用 vs 服务和 gw 代替负载均衡器不起作用

转载 作者:行者123 更新时间:2023-12-01 01:41:24 26 4
gpt4 key购买 nike

我有以下应用程序,我能够成功地在 K8S 中运行它使用类型负载均衡器的服务,非常简单的应用程序有两条路线

  • / - 你应该看到“你好应用程序”
  • /api/books应提供 json 格式的图书列表

  • 这是 service
    apiVersion: v1
    kind: Service
    metadata:
    name: go-ms
    labels:
    app: go-ms
    tier: service
    spec:
    type: LoadBalancer
    ports:
    - port: 8080
    selector:
    app: go-ms

    这是 部署

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: go-ms
    labels:
    app: go-ms

    spec:
    replicas: 2
    template:
    metadata:
    labels:
    app: go-ms
    tier: service

    spec:
    containers:
    - name: go-ms
    image: rayndockder/http:0.0.2
    ports:
    - containerPort: 8080
    env:
    - name: PORT
    value: "8080"
    resources:
    requests:
    memory: "64Mi"
    cpu: "125m"
    limits:
    memory: "128Mi"
    cpu: "250m"


    在应用了两个 yamls 之后和调用 URL 时:
    http://b0751-1302075110.eu-central-1.elb.amazonaws.com/api/books
    我能够按预期查看浏览器中的数据,也可以仅使用外部 ip 查看根应用程序中的数据。

    现在我想用 istio ,所以我按照指南并通过 helm 成功安装了它
    使用 https://istio.io/docs/setup/kubernetes/install/helm/并验证所有 53 个 crd 都在那里,还有 istio-system 组件(例如 istio-ingressgateway istio-pilot等所有 8 个部署都已启动并正在运行)

    我已将上述服务从 LoadBalancer 更改为至 NodePort
    并创建以下 istio根据 istio 文档进行配置
    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    name: http-gateway
    spec:
    selector:
    istio: ingressgateway
    servers:
    - port:
    number: 8080
    name: http
    protocol: HTTP
    hosts:
    - "*"
    ---

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
    name: virtualservice
    spec:
    hosts:
    - "*"
    gateways:
    - http-gateway
    http:
    - match:
    - uri:
    prefix: "/"
    - uri:
    exact: "/api/books"
    route:
    - destination:
    port:
    number: 8080
    host: go-ms

    另外我添加了以下内容
    kubectl label namespace books istio-injection=enabled应用程序的部署位置,

    现在要获取我使用过的外部 Ip 命令
    kubectl get svc -n istio-system -l istio=ingressgateway
    并在 external-ip 中获取此信息
    b0751-1302075110.eu-central-1.elb.amazonaws.com尝试访问 URL 时
    http://b0751-1302075110.eu-central-1.elb.amazonaws.com/api/books
    我有错误:

    无法访问此站点
    ERR_CONNECTION_TIMED_OUT
    如果我运行 docker rayndockder/http:0.0.2通过 docker run -it -p 8080:8080 httpv2
    我路径的工作正常!

    任何想法/提示可能是什么问题?

    有没有办法到 跟踪 istio配置以查看是否缺少某些内容,或者我们是否与端口或网络策略有一些勾结?

    顺便说一句,部署和服务可以在每个集群上运行以测试某人可能会有所帮助......

    如果我 更改 全部移植到 80 (在所有 yaml 文件、应用程序和 docker 中)我能够获取根路径的数据,但不能获取“api/books”的数据

    最佳答案

    我在 kubernetes 和 istio 的本地 minikube 设置中将网关端口从 8080 修改为 80,这让您的配置感到厌烦。这是我使用的命令:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Service
    metadata:
    name: go-ms
    labels:
    app: go-ms
    tier: service
    spec:
    ports:
    - port: 8080
    selector:
    app: go-ms
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: go-ms
    labels:
    app: go-ms

    spec:
    replicas: 2
    template:
    metadata:
    labels:
    app: go-ms
    tier: service

    spec:
    containers:
    - name: go-ms
    image: rayndockder/http:0.0.2
    ports:
    - containerPort: 8080
    env:
    - name: PORT
    value: "8080"
    resources:
    requests:
    memory: "64Mi"
    cpu: "125m"
    limits:
    memory: "128Mi"
    cpu: "250m"
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    name: http-gateway
    spec:
    selector:
    istio: ingressgateway
    servers:
    - port:
    number: 80
    name: http
    protocol: HTTP
    hosts:
    - "*"
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
    name: go-ms-virtualservice
    spec:
    hosts:
    - "*"
    gateways:
    - http-gateway
    http:
    - match:
    - uri:
    prefix: /
    - uri:
    exact: /api/books
    route:
    - destination:
    port:
    number: 8080
    host: go-ms
    EOF

    我把网关端口改成80的原因是,istio ingress网关默认开放了80、443等几个端口。就我而言,由于 minikube 没有外部负载均衡器,因此我使用了节点端口,在我的情况下为 31380。

    我能够使用 http://$(minikube ip):31380 的 URL 访问该应用程序。

    更改服务端口和部署是没有意义的,因为这些是特定于应用程序的。

    可能是 this问题指定 istio 入口网关打开的端口。

    关于amazon-web-services - istio - 使用 vs 服务和 gw 代替负载均衡器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56314859/

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