kubernetes 如何在k8s中从dns/hostname访问应用程序/容器?

cu6pst1q  于 2023-01-16  发布在  Kubernetes
关注(0)|答案(2)|浏览(234)

我有一个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:如果我portforward到我的服务,它的工作。我已经尝试了这个入口:

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它。无法找到该页面的服务器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:
当前工作的入口具有以下上下文路径:内部/我的应用程序看起来像这样:

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从外部访问。

nbysray5

nbysray51#

要做到这一点,您必须配置一个kube服务,kube入口和配置您的DNS。
hosts文件中添加条目将允许DNS解析为otherapplication.microk8s.hostname.internal
您可以使用dnsmasq以允许通配符解析,例如*.microk8s.hostname.internal
您可以使用nslookupdig测试dns重新解析

j8ag8udp

j8ag8udp2#

您可以复制相同的入口和更新名称,它和主机内,这是所有的变化,你需要的。

供参考:

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

您可以使用入口创建子域,只需更新入口中的Host并添加必要的serviceNameservicePort即可将流量路由到特定服务。
请随意附加必要的字段,以及注解(如果有),从为您工作的现有入口添加到上述入口。
如果您在本地运行它,则可能必须将IPMap到**/etc/hosts文件中的子域 *

/等/主机

otherapplication.microk8s.hostname.internal <IP address>

相关问题