我正在尝试在本地 Kubernetes 集群上设置 Knative(没有外部 IP)。
Kubernetes: v1.28
Knative: v1.13
1 master node and 2 workers
https://knative.dev/docs/install/yaml-install/serving/install-serving-with-yaml/
在配置 DNS 部分,我选择了无 DNS,因为 Magic DNS 需要外部 IP。现在注册函数后,我无法通过 HTTP 请求调用它。
$ kubectl get kservice fibonacci-single -n knative-serverless
NAME URL LATESTCREATED LATESTREADY READY REASON
fibonacci-single http://fibonacci-single.knative-serverless.svc.cluster.local fibonacci-single-00001 fibonacci-single-00001 True
我也尝试创建一个私有集群本地服务。 https://knative.dev/docs/serving/services/private-services/
curl http://fibonacci-single.knative-serverless.svc.cluster.local
curl: (6) Could not resolve host: fibonacci-single.knative-serverless.svc.cluster.local
我无法使用外部 IP。如何访问我的功能?
答案1
用 Knative 的话来说,就是使用“真实 DNS”实现 IPv6 和您自己的域名。
Kubernetes 支持 IPv6,而那些 Knative 文档提供了几个 Kubernetes 入口选项的参考。当然,存在一种让服务地址使用现代 IP 的方法。
默认域,通过 sslip.io 实现的“魔法 DNS”是一个演示,对于生产用例来说并不需要。显然它使用了 IP 地址嵌入名称服务?我认为这是经过深思熟虑才不向 IP 地址主体颁发证书。如果您没有“外部”IP,那么 IPv6 对您没有任何好处。
使用您的域名和通配符,解析为入口。.local 为 mDNS 保留,请勿在此处使用它。
当然,如果服务不打算在互联网上使用,请不要使名称可解析或 IP 可路由。但是,您仍然可以执行适当的命名服务。编造值,也许 *.knative.example.net
在您的私有 DNS 中解析为 处的入口2001:db8:115:5995::285
。并且此 v6 网络根据您所需的安全策略在防火墙处进行过滤。
答案2
我尝试使用 Magic DNS 设置网络这里。我相信官方安装指南中没有提供这一点。
# Install Magic DNS
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.13.1/serving-default-domain.yaml
# Get ClusterIP:
kubectl --namespace kourier-system get service kourier
# Use ClusterIP to patch config-domain
# ClusterIP.nip.io
kubectl patch configmap -n knative-serving config-domain -p "{\"data\": {\"10.96.30.55.nip.io\": \"\"}}"
现在,无需域名和外部 IP 即可运行:
curl http://fibonacci-single.knative-serverless.10.96.30.55.nip.io?x=1000