Требуется версия 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
После запуска команды:
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
KubeGateway поддерживает запуск в режиме повторного использования портов, в этом режиме можно запускать несколько служб KubeGateway на одном узле для повышения надёжности одного узла, это достигается путём добавления параметра запуска --enable-reuse-port
.
Следует отметить, что в режиме повторного использования портов несколько клиентов loopback KubeGateway будут взаимодействовать друг с другом, поэтому необходимо дополнительно установить параметр --loopback-client-token="put-your-token-here"
, чтобы обеспечить их взаимную аутентификацию.
У нас есть три метода управления трафиком, которые можно настроить в UpstreamCluster spec.flowControl.flowControlSchemas
, а затем сослаться на них в spec.dispatchPolicies.flowControlSchemaName
.
spec:
flowControl:
flowControlSchemas:
- name: "exempt"
exempt: {}
spec:
flowControl:
flowControlSchemas:
- name: "tokenbucket"
tokenBucket:
qps: 100
burst: 200
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 ссылку.
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 )