Включение сети Calico на узлах EKS Windows

Фон:

По умолчанию, когда вы настраиваете кластер EKS в AWS, кластер, который вы получаете, имеет VPC CNI, который назначает IP-адреса модулей из сети VPC. Таким образом, вы быстро увидите, что IP-адреса исчерпываются, когда мы начинаем развертывать модули !!

Чтобы преодолеть вышеуказанную проблему, нам нужно использовать другое сетевое решение для EKS. Вот несколько доступных вариантов.

Я собираюсь поговорить о Калико.

Прежде чем мы начнем с Calico для Windows, важно, чтобы вы понимали ограничения и известные проблемы Calico для Window.

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

Установите и настройте AWS CLI, kubectl, eksctl и calicoctl на машине, которую вы будете использовать для создания кластера EKS и управления им.

Давай начнем

Поскольку компоненты управления Kubernetes и Calico еще не работают в Windows, требуется гибридный кластер Linux / Windows. Сначала вы создаете кластер Linux для компонентов Calico, а затем присоединяете узлы Windows к кластеру Linux.

Создайте кластер EKS и разверните компоненты Calico на узле Linux, следуя документации Calico.

Примечание. Если вы хотите создать собственный пул IP-адресов Calico, отредактируйте calico-vxlan.yaml и обновите переменную среды CALICO_IPV4POOL_CIDR, указав свой собственный CIDR.

Убедитесь, что Calico DaemonSet работает с вашим требуемым пулом IP-адресов.

Включите Поддержка Windows для кластеров Amazon EKS.

Теперь присоедините к кластеру самоуправляемую группу узлов Windows с помощью утилиты eksctl.

Примените следующую привязку роли пользователя к кластеру.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: nodes-cluster-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:nodes

Убедитесь, что у вас есть единственный пул с VXLANMODE Always.

Для управляющих узлов Linux, использующих сеть Calico, строгая привязка должна быть установлена ​​на true. Это необходимо, чтобы узлы Linux не заимствовали IP-адреса из узлов Windows:

$ calicoctl ipam configure --strictaffinity=true

Теперь давайте настроим Calico в качестве служб Windows на рабочих узлах EKS Windows.

Доступ к узлу Windows с помощью RDP.

Включить TLS v1.2

Создайте следующий каталог.

Загрузите kubectl cli и поместите его в папку c:\k\..

Поместите kubelet и kube-proxy в одно и то же место, c:\k\. Поскольку мы используем AMI, оптимизированный для EKS, мы можем найти эти двоичные файлы в папке C: \ Program Files \ Kubernetes.

Скопируйте файл kubeconfig и kubelet-config (используемый kubelet) из c:\ProgramData\kubernetes на каждый узел Windows в файл c:\k\config and c:\k\kubelet-config.json.

Загрузите и запустите сценарии установки Calico для Windows.

Обновите выделенные переменные среды в файле конфигурации calico, расположенном внутри c:\CalicoWindows\config.ps1, как показано ниже.

Запустите установщик.

AMI, оптимизированный для EKS, имеет предварительно настроенные службы kubelet и kube-proxy, которые настроены для работы с VPC CNI. Давайте удалим его, используя скрипты из пакета Calico.

После инициализации Calico для Windows сервер метаданных AWS становится недоступным. Чтобы исправить это, выполните следующие действия.

# View existing routes
Get-NetRoute
# Retrieve interface index for primary routes (assuming node's subnet is 192.168.64.0/19)
$PvtIpIfaceIndex = (Get-NetRoute -DestinationPrefix 192.168.64.* | select -First 1).InterfaceIndex
# add AWS metadata route
New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $PvtIpIfaceIndex
#Check metadata
Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/

Обновите аргумент pod-infra-container-image внутри C: \ CalicoWindows \ kubernetes \ kubelet-service.ps1 как amazonaws.com/eks / pause-windows: latest.

Обновите аргумент config внутри C: \ CalicoWindows \ kubernetes \ kubelet-service.ps1 как c:\k\kubelet-config.json

Установите службу kubelet и kube-proxy, используя сценарий быстрого запуска из пакета Calico, C: \ CalicoWindows \ kubernetes \ install-kube-services.ps1.

Теперь запустите сервисы kubelet и kube-proxy.

Проверьте статус службы.

Теперь проверьте статус узла и убедитесь, что все узлы могут присоединиться к кластеру.

Теперь попробуйте развернуть образец приложения и убедитесь, что модули получают IP-адрес из пула Calico.

---
apiVersion: apps/v1
kind: Deployment
metadata:
    name: windows-server-iis
spec:
    selector:
        matchLabels:
            app: windows-server-iis
    replicas: 1
    template:
        metadata:
            labels:
                app: windows-server-iis
        spec:
            containers:
            - name: windows-server-iis
              image: mcr.microsoft.com/windows/servercore:1809
              imagePullPolicy: IfNotPresent
              command:
              - powershell.exe
              - -command
              - "Add-WindowsFeature Web-Server; Invoke-WebRequest -UseBasicParsing -Uri 'https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe' -OutFile 'C:\\ServiceMonitor.exe'; echo '<html><body><br/><br/><marquee><H1>Hello EKS!!!<H1><marquee></body><html>' > C:\\inetpub\\wwwroot\\default.html; C:\\ServiceMonitor.exe 'w3svc'; "
            nodeSelector:
              kubernetes.io/os: windows
            
---
apiVersion: apps/v1
kind: Deployment
metadata:
    name: nginx-deployment
spec:
    selector:
        matchLabels:
            app: nginx
    replicas: 1
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
            - name: nginx
              image: nginx:1.7.9
              securityContext:
                privileged: true
            nodeSelector:
                beta.kubernetes.io/os: linux

Проверьте статус модуля.

Заключение

Вот и все! Вы настроили рабочие узлы Windows / Linux для работы в сети Calico с открытым исходным кодом.

Ссылка:







Больше контента на plainenglish.io