2019年4月30日火曜日

datadog for CentOS7

1)以下でインストールを行う。
DD_API_KEY=24f274ee18f81be45383e51774771f59 bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)"


2)導入後、以下で起動を行う。
systemctl start datadog-agent


3)datadogのページに移動する。
◻️datadogのユーザ登録(free plan)をしておく。

https://app.datadoghq.com/infrastructure



4)導入済みのホスト名が表示されていることが把握できる。

◻️以下の画面は、datadogのダッシュボード(公式ページから参照)



5)以下、導入したホスト名のダッシュボードの詳細





2019年4月29日月曜日

master & nodeのIP変更について

◻️masterとnodeのIPのセグメントの変更後に以下の初期化を実施すると失敗に終わる。
一旦、リブートを行った方が良さそうだ。


[root@kube-admin ~]# kubeadm reset
==========================================================================================
[reset] Reading configuration from the cluster...
[reset] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
W0429 09:06:42.514796   25511 reset.go:73] [reset] Unable to fetch the kubeadm-config ConfigMap from cluster: failed to get config map: Get https://192.168.1.108:6443/api/v1/namespaces/kube-system/configmaps/kubeadm-config: dial tcp 192.168.1.108:6443: connect: no route to host
[reset] WARNING: Changes made to this host by 'kubeadm init' or 'kubeadm join' will be reverted.
[reset] Are you sure you want to proceed? [y/N]: y
[preflight] Running pre-flight checks
W0429 09:06:44.154462   25511 reset.go:234] [reset] No kubeadm config, using etcd pod spec to get data directory
[reset] Stopping the kubelet service
[reset] unmounting mounted directories in "/var/lib/kubelet"
[reset] Deleting contents of stateful directories: [/var/lib/etcd /var/lib/kubelet /etc/cni/net.d /var/lib/dockershim /var/run/kubernetes]
[reset] Deleting contents of config directories: [/etc/kubernetes/manifests /etc/kubernetes/pki]
[reset] Deleting files: [/etc/kubernetes/admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf]

The reset process does not reset or clean up iptables rules or IPVS tables.
If you wish to reset iptables, you must do so manually.
For example:
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

If your cluster was setup to utilize IPVS, run ipvsadm --clear (or similar)
to reset your system's IPVS tables.
==========================================================================================


[root@kube-admin ~]# kubeadm init
==========================================================================================
[init] Using Kubernetes version: v1.14.1
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
==========================================================================================




◻️リブート後に、以下を実施すれば成功した。

1)設定ファイルの上書き
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config


2)flannelの追加(ネットワーク系)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

2019年4月28日日曜日

各種namespaceの詳細確認について

◻️作成されている各namespace内に作成済みのpodやserviceの確認方法について記載する。


1)namespace全体を表示させる。

root@rasp-master:~/datadog# kubectl get namespace
====================================================
NAME          STATUS    AGE
default       Active    16d
kube-public   Active    16d
kube-system   Active    16d
====================================================


2)指定したnamespace内の詳細を確認したい場合、以下のように行う。
例:kubectl -n [namespace名] get all  <---svcやpodに置き換えることも可能。

root@rasp-master:~/datadog# kubectl -n kube-system get all
=======================================================================================
NAME                       DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
ds/fluentd-elasticsearch   3         3         0         3            0           <none>                        7m
ds/kube-flannel-ds         3         3         3         3            3           beta.kubernetes.io/arch=arm   16d
ds/kube-proxy              3         3         3         3            3           <none>                        16d

NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/kube-dns               1         1         1            1           16d
deploy/kubernetes-dashboard   1         1         1            1           14d

NAME                                 DESIRED   CURRENT   READY     AGE
rs/kube-dns-66ffd5c588               1         1         1         16d
rs/kubernetes-dashboard-58bcb6d7c7   1         1         1         14d

NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/kube-dns               1         1         1            1           16d
deploy/kubernetes-dashboard   1         1         1            1           14d

NAME                       DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
ds/fluentd-elasticsearch   3         3         0         3            0           <none>                        7m
ds/kube-flannel-ds         3         3         3         3            3           beta.kubernetes.io/arch=arm   16d
ds/kube-proxy              3         3         3         3            3           <none>                        16d

NAME                                 DESIRED   CURRENT   READY     AGE
rs/kube-dns-66ffd5c588               1         1         1         16d
rs/kubernetes-dashboard-58bcb6d7c7   1         1         1         14d

NAME                                       READY     STATUS             RESTARTS   AGE
po/etcd-rasp-master                        1/1       Running            18         16d
po/fluentd-elasticsearch-h4g8r             0/1       CrashLoopBackOff   5          7m
po/fluentd-elasticsearch-tdxwm             0/1       CrashLoopBackOff   4          7m
po/fluentd-elasticsearch-z85k8             0/1       Error              0          7m
po/kube-apiserver-rasp-master              1/1       Running            4          16d
po/kube-controller-manager-rasp-master     1/1       Running            30         16d
po/kube-dns-66ffd5c588-k4gss               3/3       Running            13         16d
po/kube-flannel-ds-6lt2l                   1/1       Running            6          16d
po/kube-flannel-ds-c6n6t                   1/1       Running            5          16d
po/kube-flannel-ds-jzhtr                   1/1       Running            8          16d
po/kube-proxy-5w9ck                        1/1       Running            3          16d
po/kube-proxy-6758m                        1/1       Running            3          16d
po/kube-proxy-hlr6b                        1/1       Running            4          16d
po/kube-scheduler-rasp-master              1/1       Running            30         16d
po/kubernetes-dashboard-58bcb6d7c7-nrthj   1/1       Running            2          14d

NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
svc/kube-dns               ClusterIP   10.96.0.10     <none>        53/UDP,53/TCP   16d

svc/kubernetes-dashboard   ClusterIP   10.105.131.9   <none>        443/TCP         14d
=============================================================================================

api version error

kubectl createコマンドを実行した時に、以下の表示が出た場合、yamlファイル内で指定した
apiのバージョンの変更してから再実行すること。

◻️kubectl create コマンド実行後に表示されたエラー
=========================================
error: error validating "daemonset.yaml": error validating data: unknown object type schema.GroupVersionKind{Group:"apps", Version:"v1beta1", Kind:"DaemonSet"}; if you choose to ignore these errors, turn validation off with --validate=false
==============================

====変更前=========
apiVersion: apps/v1beta1
kind: DaemonSet

metadata:

====変更後=========
apiVersion: apps/v1beta2
kind: DaemonSet

metadata:

datadog for kubernete

1)namespace作成
kubectl get namespace

2)datadogdocker image取得する
docker pull datadog/agent

3)作成したdatadogyamlファイルを実行する。
kubectl create -f datadog-1.yaml

kubectl create -f datadog-2.yaml

2019年4月26日金曜日

プリエンプション(Preemption)

プリエンプション(Preemption)は、コンピュータが実行中のタスクを一時的に中断する動作のことで、また、そのタスクを再実行することを指す。

masterのみ再起動 for Raspberry pi

1)masterを再起動後にコマンドを投入しても、以下のメッセージが出てしまう。

root@rasp-master:~# kubectl get node
The connection to the server 192.168.13.2:6443 was refused - did you specify the right host or port?


2)5分から10分位してから再度コマンドを投入すると、master-node間で同期が取れたようだ。
raspberry piのススペックの問題で、処理するのに時間が必要みたい。

root@rasp-master:~# kubectl get node
========================================================
NAME          STATUS    ROLES     AGE       VERSION
rasp-master   Ready     master    13d       v1.8.14
rasp-node1    Ready     <none>    13d       v1.8.14

rasp-node2    Ready     <none>    13d       v1.8.14
===================================================

kswapd0

psコマンドで、以下が出ている場合は、
CPU使用率も高く、SWAP発生頻度が高い状態。


  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                    
   44 root      20   0       0      0      0 R  86.2  0.0   9:03.74 kswapd0  

golang for Raspberry pi

1)golangをダウンロードする。
root@rasp-master:~# wget https://golang.org/dl/go1.10.1.linux-armv6l.tar.gz

2)インストールを行う。
root@rasp-master:~# sudo tar -C /usr/local -xzf go1.10.1.linux-armv6l.tar.gz

3)導入状態を確認する
root@rasp-master:~# ls -l /usr/local/go
===========================================
合計 188
-rw-r--r--  1 root root 47028  3月 29  2018 AUTHORS
-rw-r--r--  1 root root  1339  3月 29  2018 CONTRIBUTING.md
-rw-r--r--  1 root root 61940  3月 29  2018 CONTRIBUTORS
-rw-r--r--  1 root root  1479  3月 29  2018 LICENSE
-rw-r--r--  1 root root  1303  3月 29  2018 PATENTS
-rw-r--r--  1 root root  1555  3月 29  2018 README.md
-rw-r--r--  1 root root     8  3月 29  2018 VERSION
drwxr-xr-x  2 root root  4096  3月 29  2018 api
drwxr-xr-x  2 root root  4096  3月 29  2018 bin
drwxr-xr-x  4 root root  4096  3月 29  2018 blog
drwxr-xr-x  8 root root  4096  3月 29  2018 doc
-rw-r--r--  1 root root  5686  3月 29  2018 favicon.ico
drwxr-xr-x  3 root root  4096  3月 29  2018 lib
drwxr-xr-x 14 root root  4096  3月 29  2018 misc
drwxr-xr-x  5 root root  4096  3月 29  2018 pkg
-rw-r--r--  1 root root    26  3月 29  2018 robots.txt
drwxr-xr-x 46 root root  4096  3月 29  2018 src
drwxr-xr-x 20 root root 12288  3月 29  2018 test
=========================================

4)バージョンの確認をする。
root@rasp-master:~# cat /usr/local/go/VERSION

go1.10.1root@rasp-master:~# 


5)パスを追加する。

# vi ~/.bashrc
======================================
# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'


export PATH=$PATH:/usr/local/go/bin
===================================================


6)パスの有効化をする。
# source .bashrc


7)goファイルを実行させる
例:go run [ファイル名]
# go run requestinfo.go  <---ファイル名





apiバージョンの確認方法

1)以下のコマンドにより、各種apiのバージョンが確認できる。

# kubectl api-versions  | grep apps
====================================
apps/v1beta1

apps/v1beta2
====================================

2019年4月25日木曜日

log出力

1)ssh経由で、ログインを行う。
$ ssh admin@192.168.2.99

2)以下、ログ出力の設定を行う。
インフォメーションレベルにした。

FGT60D # config log memory filter
FGT60D (filter) # set severity information
FGT60D (filter) # end


◻️以下のように詳細レベルのログが表示ができた。

帯域制限(Traffic Shapers)

◻️Policy & Objects > Traffic Shapers

1)今回、PS4セグメントの帯域を5Mの制限目幅条件を作成してみる。


2)以下の設定を行う

①Name                         :5M-limitと記載
②Max Bandwith(ON)  :5024 Kbpsに設定


◻️Policy & Objects > Traffic Shaping Policy

3)次にポリシーの作成を行った。



4)以下の設定を行った。

①Source :PS4                           <-----入力先を指定(制限対象)
②Destination :all                      <-----出力先を指定(制限対象)
③Service :ALL                         <-----ポート指定など
④Outgoing interface :wan1      <-----出力インターフェースを指定
⑤Reverse Shaper :5M-limit     <-----上記で作成した条件を追加する



以下のように、帯域制限されていることが分かる

2019年4月24日水曜日

Static route

◻️スタティックルートの設定方法

①Network > Static Route
②Create Newを選択




③接続先のゲートウェイアドレスを指定する。
④インターフェースを指定する。




◻️接続イメージ

[WAN] -  [Router(192.168.1.200)] - [Fortigate60D] - [各機器]

FortiGuard

①System > FortiGuard
②各種、アップデート状況やライセンス確認ができる。





③更新時間を決める。

Packet Capture

Network > Packet Capture




Create Newを選択する



対象のインターフェースを選択する。



1)再生ボタンを押すことにより、キャプチャが開始する。
2)ダウンロードボタンを押すことにより、wiresharkで確認できる。





Settings

System > Settings

①ホスト名を入力
②タイムゾーンを入力
③NTP serverの設定
④言語の設定
⑤画面全体の見た目を設定
⑥アンチスパム機能を使用するために、Proxyにいている。

Firmware

System > Firmware

必要に応じて、ファームのアップデートが行える。

Feature VIsibliity

①System > Feature Visibility
②必要に応じて、各種機能を追加する。


[追加対象]

◻️Security Features
Anti-Spam Filter          :スパムフィルター機能
AntiVirus                     :アンチウィルス機能
Intrusion Prevension    :IPS機能(侵入禁止機能)
Web Filter                    :WebFilter機能(アクセス制限)


上記、ライセンスの有効期限切れになると使用禁止になる。





ダッシュボード

①Dashboard > Main
②Fortigateの管理が出来る





[必要に応じて、Widgetが追加できる]

画面右下の表示されているアイコンを選択すると
以下のような画面が出る。
a

IPv4 Policy

①Policy & Objects > IPv4 Plolicy
②PS4の外部接続用ポリシー
③raspberry piの外部接続用ポリシー
④イントラネットからraspberry piへの接続用ポリシー
⑤イントラネットの外部接続用ポリシー
⑥vpn用のポリシー

<メモ>
Source/DestinationにAddressesで登録済みのアドレスを使用している
Security Profilesについては、必要に応じて追加を行う。




◻️ポリシーの作成方法

1)Create Newを選択する。



2)各種設定を行う。
①ポリシー名を入力
②入力インターフェースを選択
③出力インターフェースを選択
④送信元を選ぶ
⑤送信先を選ぶ
⑥Serviceを選ぶ
メモ:Serviceとは、ポート番号と同様ことを表す。

⑦ONにすること。
⑧必要に応じて、Security Profilesの追加を行うこと。
⑨詳細なログを取得したいので、All Sessionsにする。

Addresses

①Policy & Objects > Addresses
②IPv4ポリシーで使用するアドレスを作成する。
Internal        :192.168.2.0/24
PS4              : 192.168.3.0/24
raspberry pi :192.168.13.0/24
wan              :192.168.1.0/24

<内訳>
Internal         :イントラネット用セグメント
PS4               :PS4用セグメント
raspberry pi  :raspberry pi用セグメント
wan               :インターネット接続用セグメント

Log Settings

①Log & Report > Log Settings
②Memoryを選択

Monitor(Routing Monitor)

Monitor > Routing Monitor

ルーティング状況が把握できるモニター画面

AntiVirus

①System > Feature Visibility
②Security Features内に、AntiVirusがONになっていること。



Security Profiles > AntiVirus

設定については、デフォルトの設定なので
別途、設定はしていない。

WebFilter

◻️WebFilterの設定方法

①Security ProfileからWebfilterを選択する。
②URL FIlterをONにする
③対象のURLを追加する。
 - googleのみ許可して、それ以外を拒否にする。
   - 最後の行に*を追加しないと、URLのアクセス制限が出来ないので注意する


①IPv4 Policyに移動する。
②対処のポリシーに対して、 WebFilterのSecurity Profilesを追加する



実際に、対象外のURLにアクセスを行うと、以下のアクセス制限の画面が
表示されることが分かる。

2019年4月19日金曜日

kubernetes(wordpressプロトタイプ作成)メモ for Raspberry pi

◻️secretファイルを作成(mysql)
kubectl create secret generic mysql --from-literal=password=wordpress123@@@


◻️mysql-volume.yaml
========================================
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    type: local
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  hostPath:
    path: /tmp/data/mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  labels:
    app: wordpress
    tier: mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
==========================================


◻️mysql.yaml
===========================================

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - image: hypriot/rpi-mysql 
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql
                  key: password
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:
            - name: mysql-local-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-local-storage
          persistentVolumeClaim:
            claimName: mysql-pvc
==============================================


◻️mysql-service.yaml
==============================================
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  type: ClusterIP
  ports:
    - port: 3306
  selector:
    app: mysql
===============================================



◻️wordpress-volume.yaml
==============================================
apiVersion: v1
kind: PersistentVolume
metadata:
  name: wordpress-pv
  labels:
    type: local
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  hostPath:
    path: /tmp/data/wordpress
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-pvc
  labels:
    app: wordpress
    tier: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
===============================================


◻️wordpress-service.yaml
===============================================
apiVersion: v1
kind: Service
metadata:
  labels:
    app: wordpress
  name: wordpress
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    app: wordpress
=================================================


◻️wordpress.yaml
=================================================

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
        - image: wordpress
          name: wordpress
          env:
          - name: WORDPRESS_DB_HOST
            value: mysql:3306
          - name: WORDPRESS_DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysql
                key: password
          ports:
            - containerPort: 80
              name: wordpress
          volumeMounts:
            - name: wordpress-local-storage
              mountPath: /var/www/html
      volumes:
        - name: wordpress-local-storage
          persistentVolumeClaim:
            claimName: wordpress-pvc

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

EFS(Dockerfile)の記載について注意

  Dockerfileにefsのマウントパス宛に、ファイルコピーを行うと ECSのサービス作成時に、コンテナのデプロイ失敗に(container run time error)になるので 別経由で、EFSにファイルをコピーした方が良い!! <Dockerfile> ...