0

我有一个在 Ubuntu 18.04 机器上运行的基于MicroK8s的本地 Kubernetes 集群。

我想要实现的目标:通常我想将我的应用程序暴露给 DNS 名称并在本地测试它们。

我的设置:

我创建了以下测试部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-app
  labels:
    app: hello-app
    tier: backend
    version: v1
spec:
  selector:
    matchLabels:
      app: hello-app
  replicas: 2
  template:
    metadata:
      labels:
        app: hello-app
    spec:
      containers:
      - name: hello-app
        image: localhost:5000/a-local-hello-image
        ports:
        - containerPort: 3000

我添加了以下服务描述符:

apiVersion: v1
kind: Service
metadata:
  name: hello-app
spec:
  selector:
    app: hello-app
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000

现在我想看到我的应用程序可用,比方说,在http://hello.someurl.com:3000.

问题:除了我当前的配置之外,我还需要设置什么才能将我的应用程序映射到本地 DNS 名称?

注意:我已经阅读了不幸没有帮助的文档。我还在集群上启用了 DNS 插件。

我将不胜感激任何帮助,任何关于如何前进的方向。

4

2 回答 2

1

实现您想要的最简单的方法是使用

kubectl port-forward service/hello-app 3000:3000

并将以下条目附加到/etc/hosts文件

127.0.0.1 hello.someurl.com

然后您可以打开浏览器并转到http://hello.someurl.com:3000

于 2019-11-12T08:45:11.163 回答
1

您可以创建一个 Ingress 资源,如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  tls:
  - secretName: tls 
  rules:
  - host: site1.domain.com
    http:
      paths:
      - path: /path1/
        backend:
          serviceName: service1
          servicePort: 80
      - path: /path2/
        backend:
          serviceName: service2
          servicePort: 8080
      - path: /
        backend:
          serviceName: service3
          servicePort: 80
  - host: site2.domain.com
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80

要完成这项工作,您需要一个 Ingress Controller,如 Nginx、Traefik 等。

获得 Ingress Controller(如果还没有)并创建 Ingress 资源(上面的 yaml)后,您可以根据主机和路径将请求转发到所需服务。例如,如果我想向 发送流量service2,我会这样做:

curl -H "site1.domain.com/path2/" INGRESS_IP:INGRESS_PORT. 该请求将通过 Ingress Controller,并将数据包传递给 service2。如果您自己修改服务名称和端口,它应该可以正常工作。

当然,你也可以把它放进去/etc/hosts

您可以在 1 个单一入口资源中设置任意数量的域和路径。

于 2019-11-12T10:46:34.513 回答