在 Openshift 中,我习惯通过路由将我的服务暴露在集群之外。这将自动创建一个新的“域名”,我可以使用该域名从本地网络上的本地 PC 访问我的应用程序。
该新域名不会自动向互联网公开,但它会在本地网络上自动运行,因此我假设有一些 DNS 服务器正在运行 - 可能是作为 OpenShift 平台的一部分 - 这些路由/DNS 名称会自动添加/删除。
现在我正在使用 kubernetes,并为我的服务/应用程序创建了一个 Ingress 对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: my-app
namespace: my-ns
spec:
rules:
- host: ???
http:
paths:
- backend:
serviceName: my-app
servicePort: 8080
path: /hello
但是我该如何填写主机呢?
每次我需要执行此操作时,我是否必须手动联系 DNS 服务器管理员并让他在本地网络上创建具有唯一名称的新 DNS 记录?
或者在 Kubernetes 中是否存在一些标准/自动化的方法来实现这一点——类似于 OpenShift?
答案1
默认情况下,kubeadm init部署一个集群,该集群使用 DNS 名称分配服务<service_name>.<namespace>.svc.cluster.local
。您可以使用--service-dns-domain
更改 DNS 名称后缀。同样,您需要/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
相应地更新文件,否则 DNS 将无法正常运行。
你可能会发现如何更改使用 kubeadm 部署的 kubernetes 1.9 上的 cluster.local 默认域?对你自己有用。
如果你有(也许将来会有)外部 DNS 提供商 - 你可能需要研究一下外部DNS方向。
当然,你应该根据自己的需求参考特定的文档。GKE 的配置示例:在 Google 容器引擎上设置 ExternalDNS
答案2
但是我该如何填写主机呢?
嗯,你手动填写域名,你已经A
在本地 DNS 上为该域名配置了指向入口 IP 的记录。就这样。
每次我需要执行此操作时,我是否必须手动联系 DNS 服务器管理员并让他在本地网络上创建具有唯一名称的新 DNS 记录?
如果你只在本地使用它,那么通过本地 DNS 服务器解析它真的很重要吗?你可以简单地将此域添加到你的/etc/hosts
文件中,只告诉你的本地机器,该域可以解析本地网络中的某个 IP。
或者在 Kubernetes 中是否存在一些标准/自动化的方法来实现这一点——类似于 OpenShift?
我不太熟悉Openshift所以我无法告诉你这个功能是如何实现的,但我很确定没有像你描述的那样,Kubernetes。