Terraform — AWS Cross Region Peering

Пример конфигурации Terraform, который создает 2 VPC в разных регионах (EU и US)  и создает между ними связность.

variables.tf

//////////////// FIRST VPC /////////////////

variable "VPC_1_REGION" {
  default = "us-east-1"
}

variable "VPC_1_NAME" {
  default = "artem-terraform-US"
}

variable "VPC_1_KEY_INSTANCE" { 
  default = "artem.gatchenko"
}

variable "VPC_1_SUBNET" { 
  default = "192.168.1.0/24"
}

//////////////// SECOND VPC /////////////////

variable "VPC_2_REGION" {
  default = "eu-west-2"
}

variable "VPC_2_NAME" {
  default = "artem-terraform-EU"
}

variable "VPC_2_KEY_INSTANCE" { 
  default = "artem.gatchenko"
}

variable "VPC_2_SUBNET" { 
  default = "192.168.2.0/24"
}

///////////////// OTHER //////////////////////

variable "INSTANCE_TYPE" {
  default = "t2.micro"
}

variable "AMI" {
  type = "map"
  default = {
    eu-west-1 = "ami-f90a4880"
    eu-west-2 = "ami-f976839e"
    eu-west-3 = "ami-0e55e373"
    us-east-1 = "ami-0ff8a91507f77f867"
    us-west-1 = "ami-0bdb828fd58c52235"
    eu-west-1 = "ami-047bb4163c506cd98"
    ap-northeast-1 = "ami-06cd52961ce9f0d85"
    ap-southeast-1 = "ami-08569b978cc4dfa10"
  }
}

Читать далее "Terraform — AWS Cross Region Peering"

Kubernetes — Ingress Nginx: replicas и nodeSelector

Replicas

Посмотрим name и namespace Ingress'а:

kubectl get deployments.apps --all-namespaces

Отредактируем наш Ingress:

kubectl edit deployments.apps nginx-ingress-controller -n ingress-nginx

И находим строку:

replicas: 1

Зададим 2 реплики:

replicas: 2

Можно сохранять изменения и смотреть количество Ingress Pod'ов.

 

nodeSelector

Укажем явно, на каким нодах нужно запускать Ingress. Посмотрим текущие label:

kubectl get nodes --show-labels

Зададим label:

kubectl label node NODE_NAME node-role.kubernetes.io/ingress=true

Снова отредактируем Ingress:

kubectl edit deployments.apps nginx-ingress-controller -n ingress-nginx

Нас интересует Deployment, а именно блок "spec" -> "containers". Добавим в него наш блок "nodeSelector":

    spec:
      containers:
      nodeSelector:
        node-role.kubernetes.io/ingress: "true"

Terraform — Kubernetes кластер на AWS EC2

Пример конфигурации Terraform, который создает Kubernetes кластер (Bare Metal) на AWS EC2. Создает Ingress с NodePort. И в конце выполнения вывод публичные IP адреса Ingress нод.

Данный темплейт создает следующие EC2 инстансы:

  • 1 manager
  • 2 workers
  • 2 ingresses

variables.tf

variable "REGION" {
  default = "us-east-1"
}

variable "PROJECT_NAME" {
  default = "artem_k8s"
}

variable "SSH_USER" { 
  default = "ubuntu"
}

variable "SSH_KEY_NAME" { 
  default = "artem.gatchenko"
}

variable "SSH_KEY_PATH" { 
  default = "/home/artem/.ssh/id_rsa"
}

variable "VPC_SUBNET" { 
  default = "192.168.1.0/24"
}

variable "INSTANCE_TYPE" {
  default = "t2.micro"
}

variable "WORKER_NUMBER" {
  default = "2"
}

Читать далее "Terraform — Kubernetes кластер на AWS EC2"

Virsh — MacOS Mojave

1. Подготовка

Установим необходимые пакеты:

apt install iptables-persistent apparmor-utils ovmf

Откроем файл конфигурации QEMU:

vim /etc/libvirt/qemu.conf

И добавим/отредактируем следующую строку:

security_driver = "apparmor"

Перезапустим сервис libvirt:

systemctl restart libvirt-bin
systemctl restart libvirtd

Читать далее "Virsh — MacOS Mojave"

QEMU/KVM — Установка MacOS Mojave

1. Конвертация в ISO образ

Для начала нам понадобится образ MacOS Mojave.

Скачать официальный получиться только на Mac

Переходим по ссылке: support.apple.com/macos/mojave

Вас перебросит в iTunes, соглашаемся с лицензионным соглашением, убираем все галочки про обновление, и выбираем скачать образ.

После того, как скачивание завершилось, нужно конвертировать скачанный образ в ISO, для этого скачаем репозиторий:

git clone https://github.com/kholia/OSX-KVM.git

И выполним скрипт:

./mojave/create_iso_mojave.sh

По завершению которого, на рабочем столе появится сконвертированный ISO образ.

Читать далее "QEMU/KVM — Установка MacOS Mojave"

FIX ERROR — virsh: operation failed: unable to find any master var store for loader

Когда пытаешься выполнить start виртуальной машины с EFI при помощи Virsh, появляется следующее сообщение:

virsh start macos-manual
error: Failed to start domain macos-manual
error: operation failed: unable to find any master var store for loader: /var/lib/libvirt/qemu/nvram/OVMF_CODE.fd
Решение:

Устанавливаем пакет "ovmf"

apt install ovmf

Редактируем файл конфигурации QEMU

vim /etc/libvirt/qemu.conf

Добавляем следующую строку:

nvram = [
    "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd"
]

Перезапускаем libvirt

systemctl restart libvirt-bin

FIX ERROR — virsh: cannot undefine domain with nvram

Когда пытаешься выполнить undefine виртуальной машины при помощи Virsh, появляется следующее сообщение:

virsh --connect qemu:///system undefine macos
error: Failed to undefine domain macos
error: Requested operation is not valid: cannot undefine domain with nvram
Решение:
virsh --connect qemu:///system undefine --nvram macos-manual

Nginx — SSL A+

Для усиления криптостойкости необходимо использовать файл параметров Диффи — Хеллмана с длиной не менее 4096 бит. Создадим такой файл:

openssl dhparam -out /etc/nginx/ssl-dhparams.pem 4096

Добавим в файл конфигурации Nginx'а:

    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:TLS:2m;
    ssl_session_timeout 2m;
    ssl_buffer_size 4k;
    ssl_dhparam /etc/nginx/ssl-dhparams.pem;
    ssl_protocols TLSv1.3 TLSv1.2;
    ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;

    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';

Для проверки можно воспользоваться следующим сервисом: ssllabs.com

FIX ERROR — xcode-select: error: tool 'agvtool' requires Xcode

Сборка Fastlane на MacOS падала на следующей ошибке:

xcode-select: error: tool 'agvtool' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
Решение:

Убедится, что Xcode установлен, и затем выполнить следующую команду:

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

IPTables — Скрипт первоначальной настройки

Данный скрипт очищает все правила файервола, задает стандартные значения для цепочек, и открывает доступ по SSH, HTTP и HTTPS

#!/bin/bash

iptables -F
iptables -X

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP

Читать далее "IPTables — Скрипт первоначальной настройки"