2019年5月23日木曜日

raspberry pi for helm(Kubernetes)

◻️以下のコマンドでarm版のHelmのインストールを行う

HELM_VERSION=v2.14.0 ; HELM_INSTALL_DIR=/usr/local/bin/ ; wget https://kubernetes-helm.storage.googleapis.com/helm-${HELM_VERSION}-linux-arm.tar.gz -O - | tar --strip=1 -C ${HELM_INSTALL_DIR} --no-same-owner --no-same-permissions -xzvf - linux-arm/helm ; chmod +x ${HELM_INSTALL_DIR}/helm


◻️取りあえず、導入は出来ているようだ。


root@rasp-master:~/linux-arm# helm version
======================================================================================
Client: &version.Version{SemVer:"v2.14.0", GitCommit:"05811b84a3f93603dd6c2fcfe57944dfa7ab7fd0", GitTreeState:"clean"}
Error: could not find tiller


2019年5月21日火曜日

メモ:OSS検証したいリスト

Sonarqube:ソースコード品質チェック
Artifactory:リポジトリ管理ツール
Gitlab:Github

2019年5月14日火曜日

チューニング for nginx



以下、パラメータのメモ

パラメーター
内容
default
net.core.rmem_max = 
TCPUDPの受信バッファのデフォルトサイズと最大サイズ。
124928
net.core.wmem_max = 
TCPUDPの送信バッファのデフォルトサイズと最大サイズ。
124928
net.nf_conntrack_max = 
ESTABLISHEDのリストの最大数(OS側の管理数)
可変
net.ipv4.conf.default.accept_source_route = 
ソースルートが指定されたパケットを拒否。本来は経路のテストを行う目的であるのでoffにする
1
net.ipv4.tcp_rmem = 
データ受信バッファ サイズ
可変
net.ipv4.tcp_timestamps = 
NAT環境下で、複数ホストがクライアントのときに、WAN側のサーバに接続が切られる対策
1
net.ipv4.tcp_fin_timeout = 
FINのタイムアウト時間
60
net.ipv4.tcp_syn_retries = 
tcpSYNを送信するリトライ回数。
この回数SYNを送ってもダメなら諦める
5
net.ipv4.tcp_synack_retries = 
接続を受付側としてオープンするとき、 カーネルは SYN ACK を詰め込んで送り、先に受けとった SYN を確認する。
5
net.ipv4.tcp_syncookies = 
SYN flood攻撃対策
1
net.ipv4.ip_local_port_range = 
TCP/IPの送信時に使用するポートの範囲
可能なら 1024-65535が良いが、iptablesAWSだとNetworkACLとかで
同様に必要に応じて開放しておかないとパケットが途中で止まってハマるから注意。
$ cat /proc/sys/net/ipv4/ip_local_port_rangeで確認できる
32768 61000
net.ipv4.tcp_tw_reuse = 
自分からの接続を使い回す。tcp_tw_recycleは相手からの接続を使い回す。
0
net.ipv4.tcp_tw_recycle = 
相手からの接続を使い回す。
0
net.ipv4.tcp_rfc1337 = 
RFC1337に準拠させる。TIME_WAIT状態のときにRSTを受信した場合、TIME_WAIT期間の終了を待たずにそのソケットをクローズする
0
net.ipv4.tcp_fin_timeout = 
タイムアウトはできる限り短いほうがいい
60
net.ipv4.tcp_max_tw_buckets = 
システムが同時に保持するtime-waitソケットの最大数。
DoS攻撃を防げるため、低くするのはやめたほうが良い。
動的
net.ipv4.tcp_orphan_retries = 
こちらからクローズしたTCPコネクションを終了する前の再送回数。
webサーバだとリソースを消費する可能性があるため、低くしたほうが良い
0
net.ipv4.tcp_keepalive_probes = 
TCP keepalive プローブを送る数。この数に達すると、 その接続が壊れたとみなす。
9
net.ipv4.tcp_slow_start_after_idle = 
keepaliveしててもしばらく通信がなかったらcongestion window sizeresetする。
keepaliveを利用しており、かつ輻輳が少ない環境ではoffが良い。
1
net.core.netdev_max_backlog = 
パケット受信時にキューに繋ぐことができるパケットの最大数
1000
net.ipv4.tcp_max_syn_backlog = 
ソケット当たりのSYNを受け付けてACKを受け取っていない状態のコネクションの保持可能数。
この値を超えたものに関してはOSSYNパケットを拒否することになる。
溢れたパケットはnetstatで確認できる。
ただし、この値はnet.core.somaxconnより大きかった場合、net.core.somaxconnの値を優先する。
1024
net.ipv4.conf.eth180.arp_ignore = 
ぶら下がってるAPサーバ群にarpに応答させない(MACアドレスを覚えさせない)
IPmacアドレスが関係ずけられると、送りたい機器に通信できなくなる。
0
net.ipv4.conf.eth180.arp_announce = 
ぶら下がってるAPサーバ群にarpに応答させない(MACアドレスを覚えさせない)
IPmacアドレスが関係ずけられると、送りたい機器に通信できなくなる。
0
net.core.somaxconn = 
一度に受け入れられるTCPセッションのキューの数。
TCPのセッション数をbacklogで管理し、それを超えたものはキューに格納される。
このキューの数をここで設定する
128
vm.swappiness = 
実メモリがある状態でスワップを使用しない
0
vm.overcommit_memory = 
実メモリ以上にプロセスにメモリを割り当てない
0
vm.overcommit_ratio = 
OOM killerで勝手にkillするくらいだったら、メモリ不足を検出してエラー処理をさせる。
vm.overcommit_memory = 2のときに設定する
50
kernel.shmmax = メモリのByte
共有メモリの最大サイズ。サーバーの搭載メモリ(1GB)に合わせて変更するので
動的?
kernel.shmall = 
システム全体の共有メモリ・ページの最大数
68719476736
kernel.msgmnb = 
1つのメッセージキューに保持できるメッセージの最大値
65536
kernel.msgmax = 
メッセージキューIDの最大値
65536
kernel.sysrq = 
SysRqとは、サーバでキーボード操作ができなくなったとき、カーネルが昨日してれば特定のキー(Alt + PrintScreen)で割り込める。使わないので0
0
kernel.core_uses_pid = 
コアダンプ時、".PID"をコアファイル名に追加しない
0

sysctl:カーネルのチューニングについて

以下、カーネルのチューニングについて記述を行う。

◻️値を表示させる。
sysctl -n net.ipv4.tcp_keepalive_time
1001


◻️名前のみを表示させる。
sysctl -N net.ipv4.tcp_keepalive_time
net.ipv4.tcp_keepalive_time


◻️設定値を変更する。
sysctl -w net.ipv4.tcp_keepalive_time=5001
net.ipv4.tcp_keepalive_time = 5001


◻️設定値が登録されているのか確認をしてみる。
sysctl -a | grep keepalive_time
net.ipv4.tcp_keepalive_time = 5001
      

◻️再起動後も設定値を反映させる必要があるので、sysctl.confに記述を行う。   
vi /etc/sysctl.conf
============================================================
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

pv4.tcp_keepalive_time = 5001
=========================================================



<メモ>


option
意味
-n
 キーの名前は表示せず、値だけ表示する
-e
不明なキーについてエラーを無視する
-N
名前のみ表示する
-q
値のセットを標準出力に表示しない
-w
sysctl の設定を変更する場合には、このオプションを指定する
-p
指定されたファイルから読み込んだ内容を sysctl 設定へロード。指定がなければ /etc/sysctl.confから
-a
現在利用できる全ての値を表示
-A
-a に同じ

2019年5月6日月曜日

セキュリティ関連メモ

1)apparmor 

以下だそうだ。
①AppArmor とは、プログラム単位でMAC(Mandatory Access Control - 強制アクセス制御) を行うためのセキュリティ機構
②MACとは、従来のファイルのパーミッションの設定等とは関係なく、 強制的にアクセス制限を設けることができる機構

2)seccomp特定のコマンド禁止など。

2019年5月5日日曜日

Access through untrusted domain対処 for Next Cloud

◻️kubectl createで作成後にwebにアクセスを行うと、以下のエラーが表示されてしまう。

Access through untrusted domain

Please contact your administrator. If you are an administrator, edit the "trusted_domains" setting in config/config.php like the example in config.sample.php.
Depending on your configuration, this button could also work to trust the domain:


◻️nextcloud(pod内)の設定ファイルの編集

1)対象のpodに接続を行う。
2)vimのインストールを行う。
3)以下、編集を行う
'trusted_domains' =>
array(
0 => 'localhost',
1 => '192.168.13.xx', <-----サーバーのIPを追加
),
==================================================


kubectl exec -it [pod名] /bin/sh

# apt-get update
# apt-get install vim

# vi /var/www/html/config/config.php
==================================================


◻️以下、ログインできるようだ。

2019年5月3日金曜日

nextcloud for kubernetes

nextcloudをkubernetesで立ち上げたかったので以下の手順で行ったみた。


dbの作成を行う。
wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/db-deployment.yaml

vi db-deployment.yaml
==============================================
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: db
  name: db
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
      - env:
        - name: MYSQL_DATABASE
          value: nextcloud
        - name: MYSQL_PASSWORD
          value: パスワード
        - name: MYSQL_USER
          value: nextcloud
        - name: MYSQL_ROOT_PASSWORD
          value: パスワード
        image: hypriot/rpi-mysql
        name: db
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: db
      restartPolicy: Always
      volumes:
      - name: db
        hostPath:
          path: "/home/pi/db-pv"
=======================================================

kubectl create -f db-deployment.yaml


②dbのserviceの作成を行う。
wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/db-svc.yaml

vi db-svc.yaml
============================
apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  ports:
    - port: 3306
      targetPort: 3306
      protocol: TCP
  selector:

    app: db
=============================

kubectl create -f db-svc.yaml


nextcloudの作成
wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/nc-deployment.yaml

vi nc-deployment.yaml
==========================================================
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: nc
  name: nc
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nc
    spec:
      containers:
      - env:
        - name: TZ
          value: Europe/Berlin
        - name: DEBUG
          value: "false"
        - name: NEXTCLOUD_URL
          value: http://nextcloud-rasp.local   <------URLを記載してみる
        - name: NEXTCLOUD_ADMIN_USER
          value: admin
        - name: NEXTCLOUD_ADMIN_PASSWORD
          value: パスワード
        - name: NEXTCLOUD_UPLOAD_MAX_FILESIZE
          value: 4G
        - name: NEXTCLOUD_MAX_FILE_UPLOADS
          value: "20"

        - name: MYSQL_DATABASE
          value: nextcloud
        - name: MYSQL_HOST
          value: db
        - name: MYSQL_PASSWORD
          value: パスワード
        - name: MYSQL_USER
          value: nextcloud
        name: nc
        image: nextcloud
        ports:
        - containerPort: 80
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/www/html
          name: html
      restartPolicy: Always
      volumes:
        - name: html
          hostPath:
            path: "/home/pi/nc-pv"       <--------------------既存の/home配下を指定
===================================================================

kubectl create -f nc-deployment.yaml


nextcloudのサービスを作成
wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/nc-svc.yaml

vi nc-svc.yaml
=========================
apiVersion: v1
kind: Service
metadata:
  name: nc
spec:
  #type: LoadBalancer
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
  selector:

    app: nc
==========================

kubectl create -f nc-svc.yaml


certificatesの作成を行う。
wget https://raw.githubusercontent.com/andremotz/nextcloud-kubernetes/master/kubernetes-yaml/omgwtfssl-pod.yaml

vi omgwtfssl-pod.yaml
=====================================================
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: omgwtfssl
  name: omgwtfssl
spec:
  restartPolicy: Never
  containers:
  - env:
    - name: SSL_SUBJECT
      value: rasp-master
    - name: CA_SUBJECT
      value: e-mailアドレスを入力
    - name: SSL_KEY
      value: /certs/rasp-master.key       <-------------任意の名前を記載
    - name: SSL_CSR
      value: /certs/rasp-master.csr      <-------------任意の名前を記載
    - name: SSL_CERT
      value: /certs/rasp-master.crt      <-------------任意の名前を記載
    name: omgwtfssl
    image: paulczar/omgwtfssl
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: certs
      name: certs
  volumes:
    - name: certs
      hostPath:
        path: "/home/pi/certs-pv"      <--------------------既存の/home配下を指定
===========================================================

kubectl create -f omgwtfssl-pod.yaml




◻️赤字の箇所がnextcloudのpodやserviceが作成されていることが分かる。

root@rasp-master:~/docker-nextcloud# kubectl get all
==============================================================================================
NAME               DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ds/datadog-agent   2         2         0         2            0           <none>          2d

NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/db          1         1         1            1           27m
deploy/mysql       1         1         1            1           13d
deploy/nc          1         1         1            1           18m
deploy/wordpress   1         1         1            1           13d

NAME                      DESIRED   CURRENT   READY     AGE
rs/db-6d6bbc8c99          1         1         1         27m
rs/mysql-779865b5dd       1         1         1         13d
rs/nc-768894dd7b          1         1         1         18m
rs/wordpress-6f4fc59b99   1         1         1         13d

NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/db          1         1         1            1           27m
deploy/mysql       1         1         1            1           13d
deploy/nc          1         1         1            1           18m
deploy/wordpress   1         1         1            1           13d

NAME               DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ds/datadog-agent   2         2         0         2            0           <none>          2d

NAME                      DESIRED   CURRENT   READY     AGE
rs/db-6d6bbc8c99          1         1         1         27m
rs/mysql-779865b5dd       1         1         1         13d
rs/nc-768894dd7b          1         1         1         18m
rs/wordpress-6f4fc59b99   1         1         1         13d

NAME                            READY     STATUS             RESTARTS   AGE
po/datadog-agent-cqgtw          0/1       CrashLoopBackOff   585        2d
po/datadog-agent-hnb2q          0/1       CrashLoopBackOff   579        2d
po/db-6d6bbc8c99-s8dmm          1/1       Running            0          27m
po/mysql-779865b5dd-zbfdz       1/1       Running            0          13d
po/mysql-master-tktsp           1/1       Running            0          8d
po/mysql-slave-l7j6w            1/1       Running            0          8d
po/mysql-slave-mlzn4            1/1       Running            0          8d
po/nc-768894dd7b-46s8w          1/1       Running            1          18m
po/wordpress-6f4fc59b99-gjm4q   1/1       Running            0          13d

NAME              DESIRED   CURRENT   READY     AGE
rc/mysql-master   1         1         1         8d
rc/mysql-slave    2         2         2         8d

NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
svc/db             ClusterIP   10.97.104.25     <none>        3306/TCP       24m
svc/kubernetes     ClusterIP   10.96.0.1        <none>        443/TCP        13d
svc/mysql          ClusterIP   10.98.74.60      <none>        3306/TCP       13d
svc/mysql-master   ClusterIP   10.103.46.31     <none>        3306/TCP       8d
svc/mysql-slave    ClusterIP   10.110.108.3     <none>        3306/TCP       8d
svc/nc             ClusterIP   10.97.92.200     <none>        80/TCP         16m
svc/wordpress      NodePort    10.102.200.103   <none>        80:30915/TCP   13d

==========================================================================================

php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...