当没有外部 IP 但有入口网关时,如何为 KNative 配置 DNS?



knative文档描述了以下内容:

要为Knative配置DNS,请从设置网络中获取外部IP或CNAME,并按照以下与您的DNS提供商进行配置

  • 如果网络层生成外部IP地址,则为域配置通配符a记录:

    # Here knative.example.com is the domain suffix for your cluster

    *.knative.example.com == A 35.233.41.212

  • 如果网络层生成CNAME,则为域配置CNAME记录:

    # Here knative.example.com is the domain suffix for your cluster

    *.knative.example.com == CNAME a317a278525d111e89f272a164fd35fb-1510370581.eu-central-1.elb.amazonaws.com

但是,我的环境没有外部负载均衡器,因此没有external-IP:

$ kubectl --namespace istio-system get service istio-ingressgateway
NAME                   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                      AGE
istio-ingressgateway   NodePort   10.110.132.172   <none>        15021:31278/TCP,80:32725/TCP,443:30557/TCP,15443:32309/TCP   8h

我确实配置了一个istio-ingresgateway:

$ kubectl get po -l istio=ingressgateway -n istio-system 
-o jsonpath='{.items[*].status.hostIP}'
10.1.0.193 10.1.0.132 10.1.0.174

我可以简单地按如下方式设置DNS吗?

*.knative.example.com     [some TTL]   IN   A    10.1.0.193
*.knative.example.com     [some TTL]   IN   A    10.1.0.132
*.knative.example.com     [some TTL]   IN   A    10.1.0.174

看起来您正在使用hostPort网络;如果是这样的话,那么Kubernetes会将主机IP地址的端口80和443映射到Istio的特使pod。只要您的istio-ingressgateway pod仍安排在同一台机器上,本周就可以工作(例如,如果您使用守护进程集,并且群集中有3个节点,请将所有三个节点的IP都放入DNS中(。以下是一些地方会出现故障,Kubernetes LoadBalancer服务会更好地工作:

  • 如果其中一个主机出现故障,1/N客户端将尝试错误的IP地址,可能会出错或超时很长,然后重试。您需要将主机从DNS中删除才能使其正常工作
  • 如果您的主机比istio-ingressgateway pod多,那么每次重新安排其中一个pod(部署更新、主机内核升级等(时,您都会出现如上所述的中断。如果少于5-7个主机,使用DaemonSet可以避免这种情况,但较大的记录集可能会导致其他问题
  • 您不能使用HorizontalPodAutoscaler(HPA(来调整istio-ingressgateway pod的数量(有关不匹配的后果,请参阅上文(

如果可能的话,您可以将MetalLB视为上述任何问题的谎言成本软件负载均衡器。如果以上都不是主要问题,那么nodePort服务比LoadBalancer服务简单一点。

到目前为止,按以下方式设置DNS对我来说还可以:

*.knative.example.com     [some TTL]   IN   A    10.1.0.193
*.knative.example.com     [some TTL]   IN   A    10.1.0.132
*.knative.example.com     [some TTL]   IN   A    10.1.0.174

最新更新