Показаны сообщения с ярлыком Linux. Показать все сообщения
Показаны сообщения с ярлыком Linux. Показать все сообщения

пятница, 30 августа 2024 г.

k8s kubelet failed to reserve sandbox name

Sometimes containerd files gets corrupted. Why?..

Workaround.

systemctl stop kubelet
systemctl stop containerd


Remove corrupted containerd

mv /var/lib/containerd/ /var/lib/containerd_
mv /run/containerd/ /run/containerd_


Set a specific IP of any k8s api master to work without the missing nginx-proxy

grep localhost /etc/kubernetes/kubelet.conf
server: https://localhost:6443


Return the node to work

systemctl restart kubelet
systemctl restart containerd


Monitoring the start of pods

watch crictl ps


Revert kubelet.conf to localhost

Ceph pgs not deep-scrubbed in time

1. Change scrub_interval

ceph config set osd osd_deep_scrub_interval 1814400
ceph tell osd.* config set osd_deep_scrub_interval 1814400


2. Temporarily increase the number of active scrub tasks

ceph tell 'osd.*' injectargs --osd_max_scrubs=2


3. Check LA and increase osd_scrub_load_threshold

ceph tell 'osd.*' injectargs --osd_scrub_load_threshold=5


4. Force deep scrub tasks

ceph health detail | grep "not deep-scrubbed since" | awk '{ print $2 }' | xargs -n1 ceph pg deep-scrub

вторник, 30 июля 2024 г.

nfs-ganesha

Some non-obvious things in the config

cat /etc/ganesha/ganesha.conf

EXPORT
{
Export_ID=1;
Path = "/nfs-stage";
Pseudo = "/nfs-stage";
Access_Type = RW;
Protocols = 4;
Transports = TCP;
Anonymous_Uid = 1000;
Anonymous_Gid = 1000;
FSAL {
Name = RGW;
User_Id = "nfs-stage";
Access_Key_Id ="ACCESS_KEY";
Secret_Access_Key = "SECRET_KEY";
}
CLIENT
{
Clients = 10.10.0.0/24;
Squash = None;
Access_Type = RW;
}
}
RGW {
        ceph_conf = "/etc/ceph/ceph.conf";
        name = "client.admin";
        cluster = "ceph";
        init_args = "--keyring=/etc/ceph/ceph.client.admin.keyring";
}
#LOG {
#        Facility {
#                name = FILE;
#                destination = "/var/log/ganesha.log";
#                enable = active;
#        }
#}


пятница, 14 июля 2023 г.

Сбор sFlow в Clickhouse для аналитики

Общая схема:

host-sflow -> sFlow -> goflow2 collector -> kafka protobuf -> clickhouse

1. Серверная часть сборки sflow

https://github.com/netsampler/goflow2
NetFlow/IPFIX/sFlow collector in Go


Kafka

Подготовить топик nflow

goflow2

Запущен в Docker

docker run --net=host -ti netsampler/goflow2:latest -transport=kafka -transport.kafka.brokers=localhost:9092 -transport.kafka.topic=nflow -format=pb -format.protobuf.fixedlen=true

 

Clickhouse

Скачать настройки протокола protobuf 

/var/lib/clickhouse/user_files/protocols.csv

Таблицы и подключение к kafka
CREATE TABLE IF NOT EXISTS nflow.flows_kafka
(
time_received UInt64,
time_flow_start UInt64,
sequence_num UInt32,
sampling_rate UInt64,
sampler_address FixedString(16),
src_addr FixedString(16),
dst_addr FixedString(16),
src_as UInt32,
dst_as UInt32,
etype UInt32,
proto UInt32,
src_port UInt32,
dst_port UInt32,
bytes UInt64,
packets UInt64
) ENGINE = Kafka()
SETTINGS
kafka_broker_list = '127.0.0.1:9092',
kafka_topic_list = 'nflow',
kafka_group_name = 'clickhouse',
kafka_format = 'Protobuf',
kafka_schema = 'flow.proto:FlowMessage',
kafka_skip_broken_messages = 1;
        
CREATE TABLE IF NOT EXISTS nflow.flows_raw
(
date Date,
datetime DateTime,
sequence_num UInt32,
sampling_rate UInt64,
sampler_address String,
src_addr String,
dst_addr String,
src_as UInt32,
dst_as UInt32,
etype UInt32,
proto UInt32,
src_port UInt32,
dst_port UInt32,
bytes UInt64,
packets UInt64
) ENGINE = MergeTree()
PARTITION BY date
ORDER BY datetime
TTL date + toIntervalDay(30)
SETTINGS index_granularity = 8192;

        
CREATE MATERIALIZED VIEW IF NOT EXISTS nflow.flows_raw_mv TO nflow.flows_raw
AS SELECT
toDate(time_received) AS date,
time_flow_start AS datetime,
sequence_num,
sampling_rate,
IPv4NumToString(reinterpretAsUInt32(substring(reverse(sampler_address), 13, 4))) AS sampler_address,
IPv4NumToString(reinterpretAsUInt32(substring(reverse(src_addr), 13, 4))) AS src_addr,
IPv4NumToString(reinterpretAsUInt32(substring(reverse(dst_addr), 13, 4))) AS dst_addr,
src_as,
dst_as,
etype,
proto,
src_port,
dst_port,
bytes,
packets        
FROM nflow.flows_kafka;


2. Установка сборщика флоу на хост

Используем host-sflow

cat /etc/hsflowd.conf
sflow {
  collector { ip=goflow2.host.example.com udpport=6343 }
   
  # ====== Local configuration ======
  pcap { dev = eth0 }
  pcap { dev = eth1 }
  # ...
}
 
systemctl enable hsflowd
systemctl start hsflowd 


3. Примеры запросов

Активные сборщики флоу

select sampler_address,count() from nflow.flows_raw where datetime>now()-24*3600 group by sampler_address limit 100;

Найти источник запросов на список внешних ресурсов

select src_addr,count() from nflow.flows_raw where datetime>now()-24*3600 and dst_addr in ('1.1.1.1','8.8.8.8') group by src_addr order by count() desc limit 100; 

вторник, 30 мая 2023 г.

Centos 7 SSH error "shell request failed on channel 0"

Столкнулся с невозможностью подключиться по ssh к нодам k8s под определённым юзером:

ssh user@10.0.0.10
shell request failed on channel 0

Выяснилось, что UID пользователя user был использован в docker image одного из сервисов.

Быстрое решение увеличить лимиты числа процессов для рядовых пользователей в Centos 7, например, на 8192:

/etc/security/limits.d/20-nproc.conf

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*          soft    nproc     4096
root       soft    nproc     unlimited

среда, 24 мая 2023 г.

Proxmox ZFS howto find Linked Clone disks

id 200 - proxmox template

id 201 - VM with Linked Clone disk

zfs list -o name,origin
...
rpool/data/vm-201-disk-0 rpool/data/base-200-disk-0@__base__

вторник, 23 мая 2023 г.

NetworkManager vlan on bond interface

nmcli con add type bond con-name bond0 ifname bond0

nmcli con modify bond0 bond.options "mode=802.3ad,xmit_hash_policy=layer2+3,miimon=100,lacp_rate=1"

nmcli con add type ethernet slave-type bond con-name bond0-eno1 ifname "eno1" master bond0

nmcli con add type ethernet slave-type bond con-name bond0-eno2 ifname "eno2" master bond0

nmcli con mod bond0 ipv4.method disabled

nmcli con mod bond0 ipv6.method ignore


nmcli con add type vlan con-name bond0.2222 ifname bond0.2222 dev bond0 id 2222

nmcli con mod bond0.2222 ipv4.addresses '10.0.0.5/24'

nmcli con mod bond0.2222 ipv4.gateway '10.0.0.1'

nmcli con mod bond0.2222 ipv4.dns '8.8.8.8,8.8.4.4'

nmcli con mod bond0.2222 ipv4.method manual 

понедельник, 15 мая 2023 г.

haproxy slowstart backend

Столкнулся с ошибкой приложения при работе с БД в схеме Percona xtradb cluster + Haproxy при рестарте одной из нод кластера

app.CRITICAL: An exception occurred while executing a query: SQLSTATE[08S01]: Communication link failure: 1047 WSREP has not yet prepared node for application use

backend bk_mysql
    mode tcp
    option mysql-check user haproxy
    default-server slowstart 30s weight 100
    server mysql-1 10.0.0.11:3306 check
    server mysql-2 10.0.0.12:3306 check
    ...

haproxy после перевода бэкенда в UP за указанный промежуток времени линейно поднимет его вес  с 0 до 100%, что значительно снизит число ошибок до перехода ноды в wsrep_ready ON.

haproxy tcp acl example

RTFM: https://www.haproxy.com/blog/use-haproxy-response-policies-to-stop-threats/#reject

frontend xxx_ft
        bind 10.0.0.10:29000
        mode tcp
        acl whitelist src 10.0.0.0/24
        tcp-request connection reject if !whitelist
        use_backend xxx_bk
backend xxx_bk
        mode tcp
        server ctcmedia 10.0.0.20:9000

вторник, 22 декабря 2020 г.

Расширение раздела без перезагрузки системы

fdisk /dev/sda

Удалить раздел, создать новый, сохранить


partprobe

Error: Partition(s) 1 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.


partx -u /dev/sda

partprobe


xfs_growfs /

суббота, 29 июня 2019 г.

Создание wildcard сертификата Let's Encrypt

Создание wildcard сертификата возможно только через DNS challenge. Для подтверждения владения доменом необходимо создать TXT запись вида _acme-challenge.example.com с определенным значением.

Используем docker certbot в ручном режиме
sudo docker run -it --rm -v /docker/volumes/etc/letsencrypt:/etc/letsencrypt -v /docker/volumes/var/lib/letsencrypt:/var/lib/letsencrypt -v /docker/volumes/var/log/letsencrypt:/var/log/letsencrypt certbot/certbot certonly --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --register-unsafely-without-email --agree-tos --manual-public-ip-logging-ok -d *.example.com
 Вывод:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:
pFIaptscrhj_BZsXNcl_wgj99X-Tuyb9x-_1l9o_bhk
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

После правки DNS зоны _acme-challenge.example.com сертификат будет сгенерирован в каталоге:
/docker/volumes/etc/letsencrypt/live/

Была идея использовать локальный bind9 c добавлением TXT записей через RFC 2136 Dynamic Updates через плагин certbot-dns-rfc2136, но до практической реализации пока не дошли руки.

суббота, 6 августа 2016 г.

Mount nfs4 share

/etc/fstab

192.168.0.1:/home/ftp /media/ftp/ nfs vers=4.0,proto=tcp,rsize=524288,wsize=524288,timeo=60,retrans=2,rw,async,hard,intr,_netdev 0 0

вторник, 17 мая 2016 г.

Понедельник как первый день недели в календаре cal

В конец файла ~/.bashrc добавляем:
alias cal='ncal -M -C'

Блокировка опасных вложений в письмах с помощью clamsmtp

В последнее время случаи рассылки вирусов-шифровальщиков в почтовых вложениях пошли на убыль, однако, такие письма продолжают попадаться.

Определимся со списком потенциально опасных вложений:
.ade, .adp, .bat, .chm, .cmd, .com, .cpl, .exe, .hta, .ins, .isp, .jar, .js, .jse, .lib, .lnk, .mde, .msc, .msp, .mst, .pif, .scr, .sct, .shb, .sys, .vb, .vbe, .vbs, .vxd, .wsc, .wsf, .wsh

В том числе, если файлы с такими расширениями находятся в архивах:
.zip, .rar, .7z.

Для фильтрации используется возможность написания собственного файла сигнатур для ClamAV. Формат .cdb файла следующий:
VirusName:ContainerType:ContainerSize:FileNameREGEX:
FileSizeInContainer:FileSizeReal:IsEncrypted:FilePos:
Res1:Res2[:MinFL[:MaxFL]]

Для нашего списка блокировки на примере .exe файлов:
rules_block_exe:CL_TYPE_MAIL:*:\.[Ee][Xx][Ee]$:*:*:*:*:*:*
rules_block_Zip_exe:CL_TYPE_ZIP:*:\.[Ee][Xx][Ee]$:*:*:*:*:*:*
rules_block_Rar_exe:CL_TYPE_RAR:*:\.[Ee][Xx][Ee]$:*:*:*:*:*:*
Полный список http://pastebin.com/Bisxq1ez

Сохраняем наш файл сигнатур в /var/lib/clamav/rules_attachment_block.cdb

Если на почтовом сервере уже используется связка postfix+clamsmtp, то дополнительной  настройки более не требуется. Однако, для удобства пользователей и системного администратора было решено написать скрипт, высылающий получателю сообщение о недоставленном письме с вирусом или запрещённым вложением.

В /etc/clamsmtpd.conf добавляем:
VirusAction: /etc/clamav/script.sh

Скрипт /etc/clamav/script.sh (http://pastebin.com/xTZ9tQ1h)
#!/bin/sh
DOMAIN=domain.com
# Notification receiver

ADMIN=postmaster@domain.com

# E-mail sending function

alert_send() {
( cat <<EOF;
To: $RECIPIENT
Reply-To: $ADMIN
Subject: =?UTF-8?B?`echo -n $SUBJECT | base64`?=
Content-Type: multipart/mixed; boundary=simple boundary

This is a multi-part message in MIME format.
--simple boundary
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64

`echo -n $DATA | base64`
--simple boundary

EOF
) | sendmail -t -oi
}

# E-mail to Administrator
SUBJECT="Письмо добавлено в карантин"
DATA="<p><b>Причина блокировки или имя вируса:</b> $VIRUS<br> \
        <b>Отправитель:</b> $SENDER<br> \
        <b>Получатель:</b> $RECIPIENTS<br><br> \
        <b>Перемещено в карантин:</b> $EMAIL<br><br>"
RECIPIENT=$ADMIN
alert_send

# E-mail to User
for RECIPIENT in $RECIPIENTS
do
     if [ X`echo $RECIPIENT | egrep @$DOMAIN$` != "X" ];
     then
        SUBJECT="Письмо добавлено в карантин"
        DATA="<p><b>Отправитель:</b> $SENDER<br> \
        <b>Получатель:</b> $RECIPIENTS<br><br> \
        <b>Перемещено в карантин:</b> $EMAIL<br><br> \
        Письмо не доставлено и перемещено в карантин из-за подозрительного вложения.<br> \
        Если вы уверены, что это ошибка, свяжитесь с отделом ИТ."
     alert_send
     fi
done

вторник, 17 июня 2014 г.

XenServer импорт VM из командной строки

Импорт объёмных виртуальных машин через XenCenter происходит с сильно заниженной скоростью. В ходе разбора полётов было обнаружено, что в выводе команды top на хосте мастера пула XenServer фигурировали stunnel и xapi с загрузкой CPU под 100% (по умолчанию все соединения между XenCenter и хостом с XenServer шифруются 256-bit AES SSL).

Импорт виртуальной машины из CLI с отключением шифрования передачи (--nossl) позволяет достичь существенного ускорения процесса.
C:\Program Files (x86)\Citrix\XenCenter>xe --nossl -s xen-master -u root -pw password vm-import filename=D:\backup\VM.xva sr-uuid=b3bb3595-02f6-e68f-52fb-d8fb77cb1e53 preserve=true
cc90231d-e0c6-1249-5a2a-08d877af9df4
где:
sr-uuid=    UUID нужной SR для сохранения диска VM.

cc90231d-e0c6-1249-5a2a-08d877af9df4 - результат выполнения команды, UUID импортированной виртуальной машины.

воскресенье, 13 апреля 2014 г.

Сброс btrfs scrub

ПК с тестовым разделом с ФС btrfs был выключен (причём штатно через halt, а не внезапным прекращением подачи электричества) во время запущенного процесса btrfs scrub. После включения компьютера повторно запустить btrfs scrub не удаётся.

Симптомы:
# btrfs scrub start /home
ERROR: scrub is already running.
To cancel use 'btrfs scrub cancel /home'.
To see the status use 'btrfs scrub status [-d] /home'.

# btrfs scrub cancel /home
ERROR: scrub cancel failed on /home: not running

# btrfs scrub status /home
scrub status for 06db95ec-33dd-4736-828e-81913cee76d6
    scrub started at Sun Apr 13 17:09:51 2014, running for 1862 seconds
    total bytes scrubbed: 402.19GiB with 0 errors
Обход проблемы:
# ls -l /var/lib/btrfs/scrub.status.*
-rw------- 1 root root 812 апр 13 17:40 /var/lib/btrfs/scrub.status.06db95ec-33dd-4736-828e-81913cee76d6

# rm -rf /var/lib/btrfs/scrub.status.*

# btrfs scrub start /home
scrub started on /home, fsid 06db95ec-33dd-4736-828e-81913cee76d6 (pid=6660)
В новых версиях btrfsprogs обещают добавить опцию форсированного старта -f, но в Debian Jessie такой пока нет.

Источник:
https://bugzilla.kernel.org/show_bug.cgi?id=66151

суббота, 12 апреля 2014 г.

Настройка Lighttpd "Grade A+" SSL Server Test от ssllabs.com

Настройки lighttpd для прохождения SSL теста ssllabs.com на A+.

/etc/lighttpd/conf-enabled/10-ssl.conf
$SERVER["socket"] == "0.0.0.0:443" {
ssl.engine = "enable"
ssl.ca-file = "/etc/lighttpd/pki/ca-certs.crt"
ssl.pemfile = "/etc/lighttpd/pki/ssl.crt"
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "enable"
ssl.use-compression = "disable"
ssl.honor-cipher-order = "enable"
ssl.cipher-list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK"
}

#Включение HSTS
server.modules += ( "mod_setenv" )
$HTTP["host"] == "domain.net" {
$HTTP["scheme"] == "https" {
setenv.add-response-header = ("Strict-Transport-Security" => "max-age=31536000; includeSubDomains")
}
}
Информация по HSTS доступна на Wikipedia.

Перенос строк и другие настройки текстового редактора nano

Внести изменения в /etc/nanorc
#Разрешить перенос длинных строк для отображения их без прокрутки
set softwrap

#Разрешить установку курсора на позицию в тексте с помощью щелчка мышки
set mouse

#Выводить позицию курсора (строка, столбец, символ) в статусе. Без этого выводится только по CTRL+C
set const

#Уменьшим вдвое "размер тубуляции"
set tabsize 4

пятница, 11 апреля 2014 г.

Тестирование скорости доступа в Интернет из командной строки

Записка склеротика.

Используем wget для загрузки файла. Сам скаченный файл отправляем в /dev/null.

Пример работы ниже. Хорошая скорость на VPS, нравится.
 wget -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
--2014-04-11 15:08:47--  http://speedtest.wdc01.softlayer.com/downloads/test500.zip
Resolving speedtest.wdc01.softlayer.com (speedtest.wdc01.softlayer.com)... 208.43.102.250
Connecting to speedtest.wdc01.softlayer.com (speedtest.wdc01.softlayer.com)|208.43.102.250|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 524288000 (500M) [application/zip]
Saving to: `/dev/null'

100%[=====================================================================================================>] 524,288,000 98.1M/s   in 5.3s   

2014-04-11 15:08:52 (94.5 MB/s) - `/dev/null' saved [524288000/524288000]
Список тестов разного размера:
wget -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test10.zip
wget -O /dev/null http://download.thinkbroadband.com/10MB.zip

wget -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test100.zip
wget -O /dev/null http://download.thinkbroadband.com/100MB.zip

wget -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
wget -O /dev/null http://download.thinkbroadband.com/500MB.zip

wget -O /dev/null http://ipv4.download.thinkbroadband.com/1GB.zip

С поддержкой ipv6:
wget -O /dev/null http://ipv6.download.thinkbroadband.com/10MB.zip

wget -O /dev/null http://ipv6.download.thinkbroadband.com/100MB.zip

wget -O /dev/null http://ipv6.download.thinkbroadband.com/512MB.zip

wget -O /dev/null http://ipv6.download.thinkbroadband.com/1GB.zip

пятница, 7 марта 2014 г.

iptables nat и статический ip

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Использование MASQUERADE, при статическом IP считается дурным тоном, необходимо использовать SNAT:

iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source $WAN_IP