Skip to main content

k8s domain

k8s怎么与域名联系在一起的

在 Kubernetes 中,将域名与服务联系在一起通常通过以下几种方法实现:

  1. 使用 Ingress 资源:Ingress 是 Kubernetes 中的一种资源,它允许你定义如何将外部 HTTP 和 HTTPS 流量路由到集群内的服务。Ingress 控制器负责实现这些规则。

  2. 使用外部 DNS 服务:通过外部 DNS 服务(如 AWS Route 53、Google Cloud DNS 等)将域名解析到 Kubernetes 集群的外部 IP 地址或负载均衡器的 IP 地址。

以下是详细的步骤和示例:

方法 1:使用 Ingress 资源

  1. 安装 Ingress 控制器: 首先,确保你的 Kubernetes 集群中已经安装了一个 Ingress 控制器。常见的 Ingress 控制器包括 NGINX Ingress Controller、Traefik 等。

    例如,使用 Helm 安装 NGINX Ingress Controller:

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm repo update
    helm install ingress-nginx ingress-nginx/ingress-nginx
  2. 创建一个 Ingress 资源: 创建一个 Ingress 资源,将域名映射到你的服务。例如,假设你有一个名为 web-nginx 的服务,监听端口 80,你可以创建一个 Ingress 资源如下:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: web-ingress
    annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
    rules:
    - host: example.com
    http:
    paths:
    - path: /
    pathType: Prefix
    backend:
    service:
    name: web-nginx
    port:
    number: 80

    使用 kubectl apply 命令应用这个 Ingress 资源:

    kubectl apply -f ingress.yaml
  3. 配置 DNS: 将你的域名(例如 example.com)的 DNS A 记录指向 Ingress 控制器的外部 IP 地址。你可以通过以下命令找到 Ingress 控制器的 IP 地址:

    kubectl get svc -n <ingress-controller-namespace>

    通常,Ingress 控制器会有一个 LoadBalancer 类型的服务,其外部 IP 地址可以用于配置 DNS。

方法 2:使用外部 DNS 服务

  1. 配置服务为 LoadBalancer 类型: 如果你不使用 Ingress 控制器,可以直接将服务类型设置为 LoadBalancer,这样云提供商会为你分配一个外部 IP 地址或负载均衡器。

    apiVersion: v1
    kind: Service
    metadata:
    name: web-nginx
    spec:
    type: LoadBalancer
    selector:
    app: web-nginx
    ports:
    - protocol: TCP
    port: 80
    targetPort: 80

    使用 kubectl apply 命令应用这个服务:

    kubectl apply -f service.yaml
  2. 配置 DNS: 将你的域名(例如 example.com)的 DNS A 记录指向 LoadBalancer 服务的外部 IP 地址。你可以通过以下命令找到 LoadBalancer 服务的 IP 地址:

    kubectl get svc web-nginx

总结

  • Ingress 资源:使用 Ingress 资源和 Ingress 控制器,可以灵活地配置域名和路径路由规则。
  • 外部 DNS 服务:将域名解析到 Kubernetes 集群的外部 IP 地址或负载均衡器的 IP 地址。

通过上述方法,你可以将域名与 Kubernetes 集群中的服务联系在一起,实现外部访问。