1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/kubewharf-kubegateway

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
quick_start.md 7.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 19:04 de3ef5f

Быстрый старт

Компиляция

Предварительные условия

Требуется версия Go 1.16 или выше.

Как скомпилировать

В проекте напрямую запустите:

make all

Результаты будут в:

bin/${GOOS}_${GOARCH}/kube-gateway

Запуск

Предварительные условия

Запуск KubeGateway зависит от etcd, развёртывание etcd см. в документации https://etcd.io/docs/v3.5/quickstart/.

Запуск

kube-gateway \
    --etcd-servers=http://localhost:2379 \
    --etcd-prefix=/registry/KubeGateway \
    --secure-port=9443 \
    --proxy-secure-ports=6443 \
    --authorization-mode AlwaysAllow \
    --enable-proxy-access-log=true \
    --v=5

После запуска команды:

  • kube-gateway самостоятельно подписывает приватный ключ, сертификат и CA-сертификат;
  • панель управления будет прослушивать порт 9443 для получения запросов на изменение конфигурации;
  • прокси будет прослушивать порт 6443.

KubeGateway после запуска не может проксировать любой трафик, нам нужно добавить конфигурацию вышестоящего кластера в панель управления, чтобы прокси заработал.

Добавление вышестоящего кластера

Сначала создайте файл YAML для вышестоящего кластера.

— Имя cluster-a.kubegateway.io — это домен вышестоящего кластера, сертификат которого должен содержать это имя.

— Содержимое secureServing не обязательно. — Если не предоставить clientCAData, то будет использоваться клиентский CA KubeGateway для проверки сертификата клиента. — Если не предоставить keyData и certData, то будут использоваться ключ и сертификат KubeGateway для обслуживания внешних сервисов.

— В конфигурации clientConfig необходимо убедиться, что у клиента kubegateway достаточно прав, подробности см. в документации по дизайну.

apiVersion: proxy.kubegateway.io/v1alpha1
kind: UpstreamCluster
metadata:
  name: cluster-a.kubegateway.io
spec:
  servers:
  - endpoint: https://<ip>:<port>
  secureServing:
    keyData: <base64 encode key PEM data>
    certData: <base64 encode cert PEM data>
    clientCAData: <base64 encode ca PEM data>
  clientConfig:
    keyData: <base64 encode key PEM data>
    certData: <base64 encode cert PEM data>
    caData: <base64 encode ca PEM data>
  dispatchPolicies:
  - rules:
    - verbs: ["*"]
      apiGroups: ["*"]
      resources: ["*"]
  - rules:
    - verbs: ["*"]
      nonResourceURLs: ["*"]

Затем примените его к панели управления KubeGateway с помощью kubectl.

kubectl --kubeconfig <path-to-kube-config> apply -f cluster-a.kubegateway.io.yaml

Доступ

Теперь вы можете получить доступ к кластеру через прокси-порт KubeGateway.

curl -k https://cluster-a.kubegateway.io:6443/api --resolve cluster-a.kubegateway.io:6443:127.0.0.1

Расширенная конфигурация

Reuse Port

KubeGateway поддерживает запуск в режиме повторного использования портов, в этом режиме можно запускать несколько служб KubeGateway на одном узле для повышения надёжности одного узла, это достигается путём добавления параметра запуска --enable-reuse-port.

Следует отметить, что в режиме повторного использования портов несколько клиентов loopback KubeGateway будут взаимодействовать друг с другом, поэтому необходимо дополнительно установить параметр --loopback-client-token="put-your-token-here", чтобы обеспечить их взаимную аутентификацию.

Управление трафиком

У нас есть три метода управления трафиком, которые можно настроить в UpstreamCluster spec.flowControl.flowControlSchemas, а затем сослаться на них в spec.dispatchPolicies.flowControlSchemaName.

Exempt

spec:
  flowControl:
    flowControlSchemas:
    - name: "exempt"
      exempt: {}

TokenBucket

spec:
  flowControl:
    flowControlSchemas:
    - name: "tokenbucket"
      tokenBucket:
        qps: 100
        burst: 200

MaxRequestsInflight

spec:
  flowControl:
    flowControlSchemas:
    - name: "limited"
      maxRequestsInflight:
        max: 1

Полная ссылка

apiVersion: proxy.kubegateway.io/v1alpha1
kind: UpstreamCluster
metadata:
  name: <your-k8s-cluster-domain>
spec:
  flowControl:
    - name: "exempt"
      exempt: {}
  dispatchPolicies:
  - rules:
    - verbs: ["*"]
      apiGroups: ["*"]
      resources: ["*"]
    flowControlSchemaName: exempt
  - rules:
    - verbs: ["*"]
      nonResourceURLs: ["*"]

Маршрутизация

См. раздел маршрутизации в документе по проектированию: TODO ссылку.

Пример конфигурации

Разделение чтения и записи

  • Все запросы get, list и watch направляются на ip-a.
  • Другие запросы направляются на ip-b.
apiVersion: proxy.kubegateway.io/v1alpha1
kind: UpstreamCluster
metadata:
  name: cluster-a.kubegateway.io
spec:
  ...
  servers:
  - endpoint: https://ip-a:6443
  - endpoint: https://ip-b:6443
  dispatchPolicies:
  - rules:
    - verbs: ["list", "get", "watch"]
      apiGroups: ["*"]
      resources: ["*"]
    upsteamSubset:
    - https://ip-a:6443
  - rules:
    - verbs: ["*"]
      apiGroups: ["*"]
      resources: ["*"]
    upsteamSubset:
    - https://ip-b:6443

Ограничение запросов списка модулей

apiVersion: proxy.kubegateway.io/v1alpha1
kind: UpstreamCluster
metadata:
  name: cluster-a.kubegateway.io
spec:
  ...
  flowControl:
    flowControlSchemas:
    - name: "list-pod"
      tokenBucket:
        qps: 10
        burst: 20
  dispatchPolicies:
  - rules:
    - verbs: ["list"]
      apiGroups: ["*"]
      resources: ["pods"] ### Ограничение скорости запросов пользователя user-a

```YAML
apiVersion: proxy.kubegateway.io/v1alpha1
kind: UpstreamCluster
metadata:
  name: cluster-a.kubegateway.io
spec:
  ...
  flowControl:
    flowControlSchemas:
    - name: "limit-user-a"
      tokenBucket:
        qps: 10
        burst: 20
  dispatchPolicies:
  - rules:
    - verbs: ["*"]
      apiGroups: ["*"]
      resources: ["*"]
      users: ["user-a"]
    flowControlSchemaName: "limit-user-a"

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/kubewharf-kubegateway.git
git@api.gitlife.ru:oschina-mirror/kubewharf-kubegateway.git
oschina-mirror
kubewharf-kubegateway
kubewharf-kubegateway
main