在私有 eks 集群上安装 istio 时遇到问题

问题描述 投票:0回答:1

我在私有子网中的 eks 集群中安装了 istio。安装 istio 后,将启动 nlb 并使用内部类型。为此,我无法从开放互联网获取流量到集群。 我还创建了一个 ALB,将流量从开放互联网转发到 istio 使用 target group 创建的 nlb。在端口 80 的目标组中进行运行状况检查失败。 如果我设置 15021 和健康检查 api /healthz/ready,我将仅收到健康检查 api 的流量。

如何从开放互联网获取流量到我的集群?

amazon-web-services kubernetes amazon-eks istio istio-gateway
1个回答
0
投票

不确定这是否是一个完整的答案,但这就是我不久前在演示项目中所做的,它可能会给您一些关于您自己的解决方案的想法。首先创建与 Route 53 中的域名关联的网关资源:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-ingress-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTP
    hosts:
    - "*.mydomain.com"

然后我创建了一个负载均衡器补丁,该补丁映射到通配符域及其子域的托管证书。通配符证书由AWS证书管理器颁发:

metadata:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:eu-west-2:090109105180:certificate/dc694f17-9ca0-4c83-be8c-f23382b59137
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
    service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: tcp

应用资源,实际上创建了一个 API 网关,但尚未暴露任何内容:

INGRESS_PATCH=$(cat ./loadbalancer-patch.yaml)
kubectl -n istio-system patch service istio-ingressgateway --patch "$INGRESS_PATCH"
kubectl -n istio-system apply -f gateway.yaml

CLUSTER_ADDRESS=$(kubectl -n istio-system get svc istio-ingressgateway -o jsonpath="{.status.loadBalancer.ingress[0].hostname}")
echo "The cluster's external address is $CLUSTER_ADDRESS"

然后暴露一个像这样的组件:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapiroute
spec:
  hosts:
  - api.mydomain.com
  gateways:
  - istio-system/istio-ingress-gateway
  http:
  - route:
    - destination:
        host: myapi
        port:
          number: 3000

然后在路由 53 中添加一条 A 记录,将 CLUSTER_ADDRESS 映射到 API 子域,并等待几分钟,让子域变得可用。

© www.soinside.com 2019 - 2024. All rights reserved.