无需外部 IP 的 Knative On-Premise 设置

无需外部 IP 的 Knative On-Premise 设置

我正在尝试在本地 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

相关内容