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

OSCHINA-MIRROR/AliyunContainerService-terway

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Terway CNI Network Plugin

CNI plugin для Alibaba Cloud VPC/ENI

CircleCI Go Report Card codecov

English | 简体中文

Try It

Установите Kubernetes

  • Подготовьте экземпляр Aliyun ECS. Мы тестировали ОС ECS Centos 7.4/7.6.
  • Установите Kubernetes с помощью kubeadm: create-cluster-kubeadm.

После настройки кластера Kubernetes.

  • Измените политику по умолчанию iptables Forward на ACCEPT на каждом узле кластера: iptables -P FORWARD ACCEPT.
  • Проверьте параметры rp_filter в sysctl, установите их на «0» на каждом узле кластера.

Убедитесь, что кластер запущен и работает правильно с помощью kubectl get cs.

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


У плагина Terway есть два режима установки:
  • Режим VPC. Режим VPC использует таблицу маршрутизации Aliyun VPC для подключения модулей. Можно назначить выделенный ENI модулю. Метод установки:
    Замените Network и access_key/access_secret в terway.yml на подсеть модуля вашего кластера и учётные данные openapi aliyun. Затем используйте kubectl apply -f terway.yml, чтобы установить Terway в кластере Kubernetes.

  • Режим вторичного IP ENI. Режим вторичного IP ENI использует вторичный ip Aliyun ENI для подключения модулей. Этот режим не ограничен квотами таблицы маршрутизации VPC. Метод установки:
    Замените access_key/access_secret и security_group/vswitches в terway-multiip.yml на учётные данные и идентификаторы ресурсов openapi aliyun. Затем используйте kubectl apply -f terway-multiip.yml, чтобы установить Terway в кластере Kubernetes.

Используйте kubectl get ds terway -n kube-system, чтобы следить за запуском плагина. Установка плагина завершена, когда количество доступных модулей daemonset 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 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@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 на aliyun/eni: 1 в одном контейнере модуля. В следующем примере будет создан модуль Nginx и назначен ENI:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    resources:
      limits:
        aliyun/eni: 1
``` **Использование сетевого плагина Terway для настройки сети в Kubernetes**

* **Установка дополнительного IP-адреса для пода (контейнера)**

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

    ```
    [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
    cn-hangzhou.i-j6c86lmr8k9rk78ju0nc   Ready    <none>   12d   v1.11.5   192.168.0.154   <none>        CentOS Linux 7 (Core)   3.10.0-693.2.2.el7.x86_64   docker://17.6.2
    [root@iZj6c86lmr8k9rk78ju0ncZ ~]# kubectl exec -it nginx-64f497f8fd-ckpdm bash
    root@nginx-64f497f8fd-ckpdm:/# ip addr show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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
    3: eth0@if106: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
        link/ether 4a:60:eb:97:f4:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 192.168.0.191/32 brd 192.168.0.191 scope global eth0
            valid_lft forever preferred_lft forever

* **Ограничение доступа между контейнерами с помощью сетевой политики**

    Плагин Terway совместим со стандартными сетевыми политиками 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. Запускаем busybox для проверки подключения к развёртыванию:

        ```
        [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. Настраиваем сетевую политику, разрешая доступ только подам с меткой `run: nginx`:

        ```
        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 может ограничивать входящий и исходящий трафик контейнера. Трафик через лимитную политику в аннотациях пода. Например:

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

## Build Terway

Необходимые условия:
* Docker >= 17.05 с многоэтапной сборкой

docker build -t acs/terway:latest .


## Тест

Модульный тест:

git clone https://github.com/AliyunContainerService/terway.git docker run -i --rm
-v $(pwd)/terway:/go/src/github.com/AliyunContainerService/terway
-w /go/src/github.com/AliyunContainerService/terway
sunyuan3/gometalinter:v1 bash -c "go test -race ./..."


Функциональный тест:

cd terway/tests ./test.sh --cluster-id ${clusterid}
--access-key ${ACCESS_KEY_ID} --access-secret ${ACCESS_KEY_SECRET}
--region ${region} --category vpc
--image ${terwayimage}


Пример:

./test.sh --cluster-id c05ef31ec40754f6c99c995963e2e01ed
--access-key ******** --access-secret ********
--region cn-huhehaote --category vpc
--image registry.cn-hongkong.aliyuncs.com/sunyuan/terway:45


## Вклад

Вы можете создавать новые задачи и запросы на вытягивание.

## Сообщество

### DingTalk

Присоединяйтесь к группе DingTalk по QR-коду ниже:
<img src="./docs/images/ding_group_qrcode.jpg" width="300" height="400">

Комментарии ( 0 )

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

Введение

Terway — сетевой плагин/CNI-плагин для Alibaba Cloud VPC/ENI. Развернуть Свернуть
Apache-2.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