Перейти к содержимому

Преобразование ресурсов Ingress в ресурсы Gateway API c помощью ingress2gateway

При переходе с Ingress на Kubernetes Gateway API можно использовать утилиту ingress2gateway, которая преобразует существующие ресурсы Ingress в ресурсы Gateway API — Gateway и HTTPRoute.

Важно

Утилита ускоряет миграцию, но не гарантирует полностью готовый результат. Перед применением проверяйте сгенерированные манифесты.

  1. Установите утилиту ingress2gateway:

    bash
    VERSION=v0.5.0
    curl -LO "https://github.com/kubernetes-sigs/ingress2gateway/releases/download/${VERSION}/ingress2gateway_Linux_x86_64.tar.gz"
    tar -xzvf "ingress2gateway_Linux_x86_64.tar.gz"
    chmod +x ./ingress2gateway
    sudo install -o root -g root -m 0755 ingress2gateway /usr/local/bin/ingress2gateway
  2. Убедитесь, что утилита установлена:

    bash
    ingress2gateway version

    Ожидаемый результат:

    ingress2gateway version: dev
    Built with Go version: go1.24.6
  3. Сконвертируйте манифест ресурса Ingress:

    bash
    ingress2gateway print \
    --providers=<провайдер например, ingress-nginx> \
    --input-file=<путь к файлу с исходным манифестом> \
    > <файл, в который будут сохранены новые манифесты>

    Список доступных провайдеров приведен в документации.

    В файл будут сохранены манифесты ресурсов Gateway и HTTPRoute. Перед применением в кластере проверьте и при необходимости отредактируйте новые манифесты.

    yaml
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: shop
    namespace: demo
    spec:
    ingressClassName: nginx
    tls:
    - hosts:
    - shop.example.com
    secretName: shop-tls
    rules:
    - host: shop.example.com
    http:
    paths:
    - path: /
    pathType: Prefix
    backend:
    service:
    name: shop-frontend
    port:
    number: 80
    - path: /api
    pathType: Prefix
    backend:
    service:
    name: shop-api
    port:
    number: 8080
    yaml
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
    annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
    name: nginx
    namespace: demo
    spec:
    gatewayClassName: nginx
    listeners:
    - hostname: shop.example.com
    name: shop-example-com-http
    port: 80
    protocol: HTTP
    - hostname: shop.example.com
    name: shop-example-com-https
    port: 443
    protocol: HTTPS
    tls:
    certificateRefs:
    - group: null
    kind: null
    name: shop-tls
    status: {}
    ---
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
    annotations:
    gateway.networking.k8s.io/generator: ingress2gateway-dev
    name: shop-shop-example-com
    namespace: demo
    spec:
    hostnames:
    - shop.example.com
    parentRefs:
    - name: nginx
    rules:
    - backendRefs:
    - name: shop-frontend
    port: 80
    matches:
    - path:
    type: PathPrefix
    value: /
    - backendRefs:
    - name: shop-api
    port: 8080
    matches:
    - path:
    type: PathPrefix
    value: /api
    status:
    parents: []
  4. Примените новые манифесты:

    bash
    kubectl apply -f <путь к файлу с новыми манифестами>