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

OSCHINA-MIRROR/AliyunContainerService-terway

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-zh_CN.md 9.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 10:15 789162d

Terway 网络插件

CNI плагин для Alibaba Cloud VPC/ENI

CircleCI

English | 简体中文

Установка Kubernetes

  • Подготовьте машину Alibaba ECS, мы проверили, что образы ECS — это Centos 7.4/7.6.
  • Используйте документацию kubeadm, чтобы создать кластер.

После установки необходимо:

  • Изменить политику iptables на ACCEPT с помощью команды iptables -P FORWARD ACCEPT.
  • Проверить параметр ядра «rp_filter» на узле и установить его значение на «0».

Чтобы убедиться, что кластер установлен, используйте команду kubectl get cs.

Установка плагина Terway

У плагина Terway есть два режима установки:

  1. Режим VPC: В режиме VPC используется маршрутизация Alibaba VPC для соединения сетей. Можно использовать отдельный ENI для Pod. Для установки выполните следующие шаги:

    • Измените конфигурацию eni.conf в файле terway.yml и настройте авторизацию и диапазон сети.
    • Настройте конфигурацию Network в том же файле.
    • Установите плагин Terway с помощью команды kubectl apply -f terway.yml.
  2. Режим ENI с несколькими IP: В этом режиме используется вспомогательный IP ENI Alibaba для соединения сетей, не ограничиваясь правилами маршрутизации VPC. Для установки выполните следующие действия:

    • Измените конфигурацию eni.conf в файле terway-multiip.yml и настройте авторизацию и ресурсы.
    • Установите плагин Terway с помощью команды kubectl apply -f terway-multiip.yml.

Когда плагин Terway будет запущен на каждом узле после выполнения команды kubectl get ds terway, установка считается успешной.

Проверка функций Terway

Общие контейнеры сети VPC

В режиме установки VPC, если контейнер не имеет специальной конфигурации, Terway выделит адрес из диапазона podCidr узла и настроит его для контейнера. Например:

[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl run -it --rm --image busybox busybox
If you don't see a command prompt, try pressing enter.
/ # ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 46:02:02:6b:65:1e brd ff:ff:ff:ff:ff:ff
/ # ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 000:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
3: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 46:02:02:6b:65:1e brd ff:ff:ff:ff:ff:ff
    inet 172.30.0.4/24 brd 172.30.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4402:2ff:fe6b:651e/64 scope link
       valid_lft forever preferred_lft forever

Использование ENI эластичного сетевого адаптера для достижения производительности, эквивалентной базовой сети

В режиме установки VPC добавьте требование к ENI в запросе ресурсов Pod: aliyun/eni: 1. В следующем примере создаётся Pod Nginx и выделяется ENI:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    resources:
      limits:
        aliyun/eni: 1

Затем можно выполнить команду exec в контейнере, чтобы увидеть, как Terway создал и привязал эластичный сетевой адаптер ECS:

[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl exec -it nginx sh
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 00:16:3e:02:38:05 brd ff:ff:ff:ff:ff:ff
    inet 172.31.80.193/20 brd 172.31.95.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe02:3805/64 scope link
       valid_lft forever preferred_lft forever
4: veth1@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 1e:60:c7:cb:1e:0e brd ff:ff:ff:ff:ff:ff
    inet6 fe80::1c60:c7ff:fecb:1e0e/64 scope link
       valid_lft forever preferred_lft forever

Контейнеры с дополнительными IP-адресами ENI

В режиме многоадресной установки ENI Terway создаст и выделит IP-адреса ENI и дополнительные IP-адреса на сетевом адаптере ENI для использования Pod. IP-адрес Pod будет совпадать с диапазоном IP-адресов VPC и VSwitch:

[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE                                 NOMINATED NODE
nginx-64f497f8fd-ckpdm   1/1     Running   0          4d    192.168.0.191   cn-hangzhou.i-j6c86lmr8k9rk78ju0nc   <none>
[root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl get node -o wide cn-hangzhou.i-j6c86lmr8k9rk78ju0nc
NAME                                 STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME
``` **Использование NetworkPolicy для ограничения доступа между контейнерами**

Terway плагин совместим со стандартным NetworkPolicy в K8S для управления доступом между контейнерами. Например:

1. Запустите сервис для тестирования:

    ```
    [root@iZbp126bomo449eksjknkeZ ~]# kubectl run nginx --image=nginx --replicas=2
    deployment "nginx" created
    [root@iZbp126bomo449eksjknkeZ ~]# kubectl expose deployment nginx --port=80
    service "nginx" exposed
    ```

2. Убедитесь, что к этому сервису можно получить доступ:

    ```
    [root@iZbp126bomo449eksjknkeZ ~]# kubectl run busybox --rm -ti --image=busybox /bin/sh
    If you don't see a command prompt, try pressing enter.
    / # wget --spider --timeout=1 nginx
    Connecting to nginx (172.21.0.225:80)
    / #
    ```

3. Настройте правила network policy, чтобы разрешить доступ только определённым сервисам с метками:

    ```
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: access-nginx
    spec:
      podSelector:
        matchLabels:
          run: nginx
      ingress:
      - from:
        - podSelector:
            matchLabels:
              access: "true"
      ```

4. Протестируйте, что контейнеры без указанных меток не могут получить доступ к сервису, а контейнеры с указанными метками могут:

    ```
    [root@iZbp126bomo449eksjknkeZ ~]# kubectl run busybox --rm -ti --image=busybox /bin/sh
    If you don't see a command prompt, try pressing enter.
    / # wget --spider --timeout=1 nginx
    Connecting to nginx (172.21.0.225:80)
    wget: download timed out
    / #

    [root@iZbp126bomo449eksjknkeZ ~]# kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/sh
    If you don't see a command prompt, try pressing enter.
    / # wget --spider --timeout=1 nginx
    Connecting to nginx (172.21.0.225:80)
    / #
    ```

**Ограничение входящего и исходящего трафика для контейнеров**

Terway плагин использует правила ограничения скорости на сетевых картах контейнеров для контроля трафика. Это позволяет избежать перегрузки трафика на узле из-за одного контейнера. Правила входящего и исходящего трафика настраиваются через аннотации `k8s.aliyun.com/ingress-bandwidth` и `k8s.aliyun.com/egress-bandwidth`, например:

apiVersion: v1 kind: Pod metadata: name: nginx annotations: k8s.aliyun.com/ingress-bandwidth: 1m k8s.aliyun.com/egress-bandwidth: 1m spec: nodeSelector: kubernetes.io/hostname: cn-shanghai.i-uf63p6s96kf4jfh8wpwn containers:

  • name: nginx image: nginx:1.7.9 ports:
    • containerPort: 80

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

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

1
https://api.gitlife.ru/oschina-mirror/AliyunContainerService-terway.git
git@api.gitlife.ru:oschina-mirror/AliyunContainerService-terway.git
oschina-mirror
AliyunContainerService-terway
AliyunContainerService-terway
master