понедельник, 29 сентября 2025 г.

Архимейт (Sparx) Линки/ссылки на диаграммы. Archimate Links

 Методы привязки ссылок на другие объекты/диаграммы в Sparx для создания вложенных диаграмм.

1) Произвольные (почти) ссылки на диаграммы:

- правой кнопкой мыши -> контекстное меню-> New child diagramm-> Select composite diagramm -> Выбрать свою диаграмму из браузера (иерархия вкладок , слева обычно)

2) Перенести диаграмму/объект из браузера с нажатым CTRL. затем выбрать необходимый вид ссылки. Доступны преформатированные view с уменьшенным масшатбом, как с обектами внутри таки просто графический контейнер.

3) Для диаграмм. переносим левой кнопкой мыши, автоматически предлагается HyperLink выбираем, но визуализация просто как надпись. форму объекта надо подготовить заранее и без названия.    

н

Использование стрелок из Toolbox:

 Выбираем стрелку (Relationships) , просто нажав на неё. Затем  нажав левую кнопку мыши, проводим от сорс обьекта к дестинашен объекту, пока не засветится пунктирная граница на дестинешн, затем отпускаем левую кнопку мыши.

Экспорт в картинку:

Publish-> Save File (выбрать формат)


Изменить тип/направление связи:

правой кнопкой, Advanсed -> Change Type/Reverse Direction


Изменить composition to aggregation (shared)и

aggregation shared (розовый ромб) - означает что может содержаться в нескольких более низкоуровневых обьектах

composition (черный ромб)  - элемент (обычно системное ПО/приклад) может быть частью только этого более низкоуровневого объекта


Изменить контур фигуры (для поянения целевого/не целевого статуса)

правой кнопкой мыши, выбрать цвет в верхнем меню, там же параметры надписи 


Изменить прозрачность (изменяются надписи, появляется тип обьекта и т.д.)

Appearance -> Enable Custon Style

Затем правой кнопкой выбрать появившиеся прямоугольнички "транспаренси" и  выбрать 25,50,75,100 прозрачности.

https://sparxsystems.com/enterprise_architect_user_guide/17.1/the_application_desktop/custom_draw_style_toolbar.html

https://sparxsystems.com/forums/smf/index.php?topic=40318.0


воскресенье, 22 декабря 2024 г.

tuning linux for high load (net)

Pages with twicks


https://www.thegeekdiary.com/sysctl-setting-for-high-load-and-prevent-ddos/

https://easyengine.io/tutorials/linux/sysctl-conf/

https://reintech.io/blog/tuning-linux-kernel-parameters-rocky-linux-9

https://stupin.su/wiki/linux_sysctl/

http://kb.ictbanking.net/article.php?id=348

https://www.cyberciti.biz/tips/linux-increase-outgoing-network-sockets-range.html

https://www.cyberciti.biz/tips/linux-increase-outgoing-network-sockets-range.html

https://habr.com/ru/articles/108763/

https://docs.emqx.com/en/emqx/latest/performance/tune.html







среда, 18 декабря 2024 г.

Публикация VPN сервера Windows 2019 (pptp, l2tp) из приватной сети через NAT checkpoint

1)  При стандартной настройке NAT (incoming NAT for ANY) pptp не работает, хотя tcp/1723  и GRE транслируются во внутрь, проблема в том, что только обратный GRE трафик от сервера не транслируется. Для этого необходимо добавить и  исходящее правило NAT (any, hide) только для GRE трафика и разрешить в ACL исходящий трафик только для GRE.  Ответные же TCP и UDP  от VPN сервера будут автоматический выпущены в контексте инициирующего их  входящего NAT.

2) L2tp по умолчанию не работает, так Windows (клиент и сервер) не понимают NAT-T. для этого необходимо включить  опцию в registy по статье:

https://winitpro.ru/index.php/2017/10/24/reshaem-problemu-podklyucheniya-k-l2tp-ipsec-vpn-serveru-za-nat/

или использовать командлет PowerShell для внесения изменений в реестр:

Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 –Force


понедельник, 10 июня 2024 г.

Архитектура (ИТ)


Матрица Захмана:


или







 TOGAF (the open group architecture framework)

ADM (Architecture Deployment Method)

ADM describes 10 phases and preliminary phase




среда, 17 апреля 2024 г.

Postgresql cluster patroni

разворачиваем кластер с помощью ansible

https://github.com/vitabaks/postgresql_cluster?tab=readme-ov-file


ставим dbeaver

https://pq.hosting/help/instructions/407-ustanovka-dbeaver-v-ubuntu-2204.html


ставим jmeter

https://www.how2shout.com/linux/2-ways-to-install-apache-jmeter-on-ubuntu-22-04-lts-linux/

вторник, 16 апреля 2024 г.

Ansible установка, настройка SSH

Для установки Ansible (ubuntu) есть несколько способов:

1)  С помощью "apt"

sudo apt update

sudo apt upgrade -y

sudo apt install ansible

Но вероятнее всего установится устаревшая версия, 2.10.хх ,

("ansible --version")

которая не поддерживает современные playbook

для поднятия версии до актуальной:

sudo add-apt-repository --yes --update ppa:ansible/ansible

sudo apt install ansible

если версия не поднимется или ansible вообще пропадет, то можно воспользоваться:

apt --fix-broken install

и уточнить версию:

"ansible --version"

https://www.cherryservers.com/blog/install-ansible-ubuntu

2) С помощью pip

Установим pip:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python3 get-pip.py --user

проверим наличие: python3 -m pip -V

Установим ansible:

python3 -m pip install --user ansible

( при необходимости, минимальная версия:

python3 -m pip install --user ansible-core

или конкретная версия:

python3 -m pip install --user ansible-core==2.12.3 )

Обновление через pip (не проверял):

python3 -m pip install --upgrade --user ansible

этот и другие способы: https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html



Для того чтобы ansible мог подключаться к хостам (на которых он будем изменять что-то)

необходимо настроить вход по ключу (без пароля) есть несколько способов:


1) создаем (linux) пару ключей (pub and priv, pass-фразу не вводим, просто "enter")

ssh-keygen -f ~/.ssh/id_rsa  (можно отдельное название использовать для ключа вместо id_rsa )

ssh-copy-id -i ~/.ssh/id_rsa.pub user-ansbl@192.168.58.58 

#(192.168.58.58 машина которой будем управлять, в ней , в файле $HOME/.ssh/authorized_keys, должно появиться что-то типа: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICc/6Mhk0/y....)

в inventory file можно добавить: 

all:

  vars:

    ansible_user: ta

  hosts:

    ta-lxlt:

      ansible_host: 192.168.58.58

      ansible_ssh_private_key_file: ~/.ssh/id_rsa


или запусить ssh-agent:

ssh-agent $SHELL

ssh-add ~/.ssh/id_rsa


после чего проверить:

ssh user-ansbl@192.168.58.58

должно открыться ssh сессия на удаленную машину без ввода пароля.


https://dev.to/rimelek/ansible-playbook-and-ssh-keys-33bo

проверяем:

ansible all -m ping

можно приватный ключ указать и через параметр:

ansible -playbook ХХХХХХ.yaml --private-key ~/.ssh/id_rsa


2) использовать сгенерированные в putty ключи:

в putty key generator создаем ключи типа:  ssh-ed25519, сохраняем оба ключа (приватный).

(в окошке же сразу видно и публичный ключ, при необходимости можно его скоприровать)

если разворачиваем виртуалку в клауде, то при создании ВМ есть возможность сразу вставить (если реализован cloud-init у провайдера)  публичный ключ из окошка "putty key generator" (если ранее загружен/сгенерирован приватный ключ)

Затем выбираем пункт "Conversion" и Export OpenSSH key, сохраняем в файле (без пароля)

(в файле будет что-то типа -----BEGIN OPENSSH PRIVATE KEY-----) 

именно из этого файла необходимо будет скопировать содержимое и вставить ~/.ssh/id_rsa на машинке с ansible.

выставить права:

chmod 600 /root/.ssh/id_rsa

Если же подключаться с рабочей машинки с Putty, то надо прикрепить приватный ключ .ppk к ssh-сессии.



суббота, 6 января 2024 г.

Cilium hubble ui подключение

 Cilium имеет реализацию service-mesh поэтому подключусь к UI интерфейсу (HUBBLE UI), чтобы увидеть и отрассировать связности между контейнерами. В YC есть возможность выбрать cilium как основу для связности в кластере (наряду calico). И наличие cilium позволяет подключать (разносить) ноды (worker and master) по произвольным (разным) L3 сегментам. Важно чтобы трафик пропускался для VXLAN (в принципе, сам VXLAN работает и через 1:1 NAT, возможно и через маскарадинг?) 

Для подключения необходимо установить контейнер HUBBLE UI, ставим манифестом (kubectl apply -f hubble-ui.yaml)

# Source: cilium/templates/hubble-ui-serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: "hubble-ui"
  namespace: kube-system
---
# Source: cilium/templates/hubble-ui-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: hubble-ui-envoy
  namespace: kube-system
data:
  envoy.yaml: |
    static_resources:
      listeners:
        - name: listener_hubble_ui
          address:
            socket_address:
              address: 0.0.0.0
              port_value: 8081
          filter_chains:
            - filters:
                - name: envoy.filters.network.http_connection_manager
                  typed_config:
                    "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
                    codec_type: auto
                    stat_prefix: ingress_http
                    route_config:
                      name: local_route
                      virtual_hosts:
                        - name: local_service
                          domains: ["*"]
                          routes:
                            - match:
                                prefix: "/api/"
                              route:
                                cluster: backend
                                prefix_rewrite: "/"
                                timeout: 0s
                                max_stream_duration:
                                  grpc_timeout_header_max: 0s
                            - match:
                                prefix: "/"
                              route:
                                cluster: frontend
                          cors:
                            allow_origin_string_match:
                              - prefix: "*"
                            allow_methods: GET, PUT, DELETE, POST, OPTIONS
                            allow_headers: keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout
                            max_age: "1728000"
                            expose_headers: grpc-status,grpc-message
                    http_filters:
                      - name: envoy.filters.http.grpc_web
                      - name: envoy.filters.http.cors
                      - name: envoy.filters.http.router
      clusters:
        - name: frontend
          connect_timeout: 0.25s
          type: strict_dns
          lb_policy: round_robin
          load_assignment:
            cluster_name: frontend
            endpoints:
              - lb_endpoints:
                  - endpoint:
                      address:
                        socket_address:
                          address: 127.0.0.1
                          port_value: 8080
        - name: backend
          connect_timeout: 0.25s
          type: logical_dns
          lb_policy: round_robin
          http2_protocol_options: {}
          load_assignment:
            cluster_name: backend
            endpoints:
              - lb_endpoints:
                  - endpoint:
                      address:
                        socket_address:
                          address: 127.0.0.1
                          port_value: 8090
---
# Source: cilium/templates/hubble-ui-clusterrole.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: hubble-ui
rules:
  - apiGroups:
      - networking.k8s.io
    resources:
      - networkpolicies
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - componentstatuses
      - endpoints
      - namespaces
      - nodes
      - pods
      - services
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - apiextensions.k8s.io
    resources:
      - customresourcedefinitions
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - cilium.io
    resources:
      - "*"
    verbs:
      - get
      - list
      - watch
---
# Source: cilium/templates/hubble-ui-clusterrolebinding.yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: hubble-ui
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: hubble-ui
subjects:
  - kind: ServiceAccount
    namespace: kube-system
    name: "hubble-ui"
---
# Source: cilium/templates/hubble-ui-service.yaml
kind: Service
apiVersion: v1
metadata:
  name: hubble-ui
  labels:
    k8s-app: hubble-ui
  namespace: kube-system
spec:
  selector:
    k8s-app: hubble-ui
  ports:
    - name: http
      port: 80
      targetPort: 8081
  type: ClusterIP
---
# Source: cilium/templates/hubble-ui-deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: kube-system
  labels:
    k8s-app: hubble-ui
  name: hubble-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: hubble-ui
  template:
    metadata:
      annotations:
      labels:
        k8s-app: hubble-ui
    spec:
      securityContext:
        runAsUser: 1001
      serviceAccount: "hubble-ui"
      serviceAccountName: "hubble-ui"
      containers:
        - name: frontend
          image: "quay.io/cilium/hubble-ui:v0.7.9@sha256:e0e461c680ccd083ac24fe4f9e19e675422485f04d8720635ec41f2ba9e5562c"
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
              name: http
          resources: {}
        - name: backend
          image: "quay.io/cilium/hubble-ui-backend:v0.7.9@sha256:632c938ef6ff30e3a080c59b734afb1fb7493689275443faa1435f7141aabe76"
          imagePullPolicy: IfNotPresent
          env:
            - name: EVENTS_SERVER_PORT
              value: "8090"
            - name: FLOWS_API_ADDR
              value: "hubble-relay:80"
          ports:
            - containerPort: 8090
              name: grpc
          resources: {}
        - name: proxy
          image: "docker.io/envoyproxy/envoy:v1.18.2@sha256:e8b37c1d75787dd1e712ff389b0d37337dc8a174a63bed9c34ba73359dc67da7"
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8081
              name: http
          resources: {}
          command: ["envoy"]
          args: ["-c", "/etc/envoy.yaml", "-l", "info"]
          volumeMounts:
            - name: hubble-ui-envoy-yaml
              mountPath: /etc/envoy.yaml
              subPath: envoy.yaml
      volumes:
        - name: hubble-ui-envoy-yaml
          configMap:
            name: hubble-ui-envoy

проверяем что поставилось: 

C:\work\projects>kubectl get deployment -n kube-system

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE

cilium-operator       1/1     1            1           21h

coredns               1/1     1            1           21h

hubble-relay          1/1     1            1           21h

hubble-ui             1/1     1            1           42m

kube-dns-autoscaler   1/1     1            1           21h

metrics-server        1/1     1            1           21h

C:\Users\adm>kubectl get svc -n kube-system

NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE

cilium-agent      ClusterIP   None            <none>        9090/TCP,9095/TCP        21h

cilium-operator   ClusterIP   None            <none>        6942/TCP                 21h

hubble-metrics    ClusterIP   None            <none>        9091/TCP                 21h

hubble-relay      ClusterIP   10.96.212.143   <none>        80/TCP                   21h

hubble-ui         ClusterIP   10.96.42.39     <none>        80/TCP                   45m

kube-dns          ClusterIP   10.96.0.2       <none>        53/UDP,53/TCP,9153/TCP   21h

metrics-server    ClusterIP   10.96.124.89    <none>        443/TCP                  21h

Затем биндим порт командой:

kubectl port-forward -n kube-system svc/hubble-ui 12000:80 

Заходим без авторизации и находим такие визуализации (старые деплойменты надо будет перезапустить, иначе их связностей не будет видно - но они появятся после рестарта)