K8S
基础
暴露应用

暴露应用

Kubernetes Workload 可以相互暴露,但也可以通过 Kubernetes Service 或 Ingress 公开暴露到互联网。

一个 Service 为暴露的应用程序分配了专用 IP 地址,而 Ingress 则用于 HTTP 的协议,以减轻每个端点需要单独 IP 的需求。

使用 Ingress

使用 Ingress 用于 HTTP 的应用程序可节省 IP 地址空间,并提供 DNS 名称以及 TLS 证书,从而通过 https 访问您的应用程序。

目前提供 2 种方式使用:

  • 共享模式:在创建集群中已经存在 IngressClass nginx, 使用 Ingress 时指定 IngressClass 为 nginx 即可
  • 独占模式:使用下面的公共服务 (Service LB), 部署自己的 Ingress Controller

使用共享 Ingress Controller

  • 设置 spec.ingressClassName 值为 nginx 以显示使用共享的 Ingress Controller
  • 设置 spec.rules.host 值格式为 <app>.<cluster>.ing.zw1.paratera.com,例如 ollama.vcluster-example.ing.zw1.paratera.com
    • <app> 为自定义名称
    • <cluster>kubeconfig 中的 clusters.name 获取
  • 如果需要支持 tls 则额外设置
    • metadata.annotations.cert-manager.io/cluster-issuerzerossl-prod
    • spec.tls.secretNameollama-tls
    • spec.tls.hostsspec.rules.hosts 相同值

示例

ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ollama
  namespace: default
  annotations:
    cert-manager.io/cluster-issuer: zerossl-prod
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - ollama.vcluster-example.ing.zw1.paratera.com
      secretName: ollama-tls
  rules:
    - host: ollama.vcluster-example.ing.zw1.paratera.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: ollama
                port:
                  number: 80

使用独占 Ingress Controller

⚠️

依赖公共服务

公共服务 (Service LB)

⚠️

需要申请使用