我有一个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
您可以使用nslookup
或dig
测试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并添加必要的serviceName和servicePort将流量路由到特定的服务。
可以随意在后面加上必要的字段,以及注释如果有任何上述入口从现有的入口为您工作。
如果您在本地运行它,您可能必须将IP映射到子域本地目录/etc/hosts文件
/etc/主机
otherapplication.microk8s.hostname.internal <IP address>