如何在k8s中从dns/主机名访问应用程序/容器?



我有一个k8s集群,我在那里部署了一些容器。

在microk8s.hostname.internal.

此时,我已经部署了一个应用程序/容器,可以在这里访问:microk8s.hostname.internal/myapplication,通过服务和入口。

这个效果很好。

现在我想部署另一个应用程序/容器,但我希望它可以这样访问:otherapplication.microk8s.hostname.internal.

我该怎么做?

microk8s中当前安装的插件:

aasa@bolsrv0891:/snap/bin$ microk8s status
microk8s is running
high-availability: no
addons:
enabled:
dashboard            # (core) The Kubernetes dashboard
dns                  # (core) CoreDNS
helm                 # (core) Helm - the package manager for Kubernetes
helm3                # (core) Helm 3 - the package manager for Kubernetes
ingress              # (core) Ingress controller for external access
metrics-server       # (core) K8s Metrics Server for API access to service metrics

更新1:如果我移植到我的服务,它就会工作。我已经尝试了这个入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
namespace: jupyter-notebook
annotations:
kubernetes.io/ingress.class: public
spec:
rules:
- host: jupyter.microk8s.hostname.internal
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jupyter-service
port:
number: 7070

但是我不能访问它,也不能ping它。Chrome说:无法找到jupyter.microk8 .hostname.internal的服务器IP地址。

我的服务是这样的:

apiVersion: v1
kind: Service
metadata:
name: jupyter-service
namespace: jupyter-notebook
spec:
ports:
- name: 7070-8888
port: 7070
protocol: TCP
targetPort: 8888
selector:
app: jupyternotebook
type: ClusterIP
status:
loadBalancer: {}

我当然可以ping microk8s.hostname.internal.

更新2:

当前运行的入口有一个上下文路径:microk8s. bolden .internal/myapplication,如下所示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: public
nginx.ingress.kubernetes.io/rewrite-target: /$1
name: jupyter-ingress
namespace: jupyter-notebook
spec:
rules:
- http:
paths:
- path: "/jupyter-notebook/?(.*)"
pathType: Prefix
backend:
service:
name: jupyter-service
port:
number: 7070

可以通过访问microk8s.hostname.internal/jupyter-notebook从外部访问。

要做到这一点,您必须配置kube服务,kube入口和配置DNS。

hosts文件中添加一个条目将允许DNS解析到otherapplication.microk8s.hostname.internal

您可以使用dnsmasq来允许通配符分辨率,例如*.microk8s.hostname.internal

您可以使用nslookupdig测试dns解析

你可以复制相同的入口和更新名称,其中的主机,这是所有你需要的改变。

ref:

kind: Ingress
metadata:
name: second-ingress <<- make sure to update name else it will overwrite  if the same
spec:
rules:
- host: otherapplication.microk8s.hostname.internal
http:
paths:
- path: /
backend:
serviceName: service-name
servicePort: service-port

您可以创建带有ingress的子域,只需更新Host并添加必要的serviceNameservicePort将流量路由到特定的服务。

可以随意在后面加上必要的字段,以及注释如果有任何上述入口从现有的入口为您工作。

如果您在本地运行它,您可能必须将IP映射到子域本地目录/etc/hosts文件

/etc/主机

otherapplication.microk8s.hostname.internal <IP address>

相关内容

最新更新