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