顯示具有 CentOS 7 標籤的文章。 顯示所有文章
顯示具有 CentOS 7 標籤的文章。 顯示所有文章

2017年6月15日 星期四

Centos 7 設定 EXIM 郵件系統利用 ISP、GMAIL 寄送信件

沒使用過 EXIM,練習一下怎麼設定它來 Relay 主機的通知信件寄送。

EXIM 利用 ISP 或 Gmail 幫忙寄送信件的設定還蠻簡單的:

1.安裝 EPEL 套件庫
# yum install -y epel-release
# yum update

2.安裝 EXIM MTA 軟體
# yum install -y exim

3.停用 postfix
# systemctl stop postfix.service
# systemctl disable postfix.service

4.變更系統 MTA 預設值
# alternatives --config mta

選擇 EXIM 為預設 MTA 程式

5.開機自動啟動 EXIM mail server
# systemctl enable exim.service
# systemctl start exim.service

6.修改 exim.conf 設定(只是拿來寄測試信件,不改也沒關係)
# vi /etc/exim/exim.conf
primary_hostname = exim.yourdomain.com
domainlist local_domains = yourdomain.com

7.設定怎麼寄送信件
設定 EXIM 使用 HINET 寄送信件(要使用 HINET 線路)
# routers section  (要放在約 667 行 begin routers 段落裡)
send_via_hinet:
  driver = manualroute
  domains = !+local_domains
  transport = remote_smtp
  route_list = * msr.hinet.net


設定 EXIM 使用 Gmail 寄送信件:
# routers section  (要放在約 667 行 begin routers 段落)
send_via_gmail:
  driver = manualroute
  domains = ! +local_domains
  transport = gmail_smtp
  route_list = * smtp.gmail.com

# transports section (要放在約 874 行 begin transports 段落)
gmail_smtp:
  driver = smtp
  port = 587
  hosts_require_auth = $host_address
  hosts_require_tls = $host_address

# authenticators section (要放在約 1000 行 begin authenticators 段落)
gmail_login:
  driver = plaintext
  public_name = LOGIN
  client_send = : myGmail@gmail.com : password


設定完成測試寄信:
# yum install -y mailx
# mail -s "test mail" MyMail@gmail.com < anaconda-ks.cfg

可以收到信的話,就OK了。


第一次接觸 EXIM,結果上面的設定值放錯段落,真是.........
exim: authenticator send_via_hinet: cannot find authenticator driver "manualroute"

exim: router gmail_smtp: cannot find router driver "smtp"


如果設定正確,還是無法使用 Gmail 寄信:
要確認 [允許安全性較低的應用程式] 是否開啟。
開啟功能的設定位置:

Gmail 我的帳戶 > 登入和安全性 > 己連結的網站與應用程式





2017年5月12日 星期五

NIS Server (Master、Slave)安裝設定

相關服務:

NIS Client 設定:

Master 和 Slave 的設定幾乎一樣,不同點會特別註明。
NIS Server 端設定
安裝 NIS 套件:
# yum install -y ypserv ypbind yp-tools rpcbind

NIS 主要設定檔(也可利用 authconf-tui 指令設定):
/etc/ypserv.conf          //主要的 ypserv 設定檔,規範 NIS 用戶端是否可登入的權限
/etc/hosts                //NIS server/client 須網路主機名稱與 IP 的對應
/etc/sysconfig/network    //指定 NIS 的網域 (nisdomainname)
/var/yp/Makefile          //資料庫設定檔

NIS 伺服器提供的主要服務方面有底下兩個:
/usr/sbin/ypserv          //NIS 伺服器主要服務
/usr/sbin/rpc.yppasswdd   //額外的 NIS 用戶端之使用者密碼修改服務,相關程式則是 yppasswd 指令

帳號密碼資料庫有關的指令:
/usr/lib64/yp/ypinit      //建立資料庫的指令
/usr/bin/yppasswd         //NIS 用戶端,讓用戶修改伺服器上的密碼

設定主機/IP對應:
# vi /etc/hosts
192.168.60.47 nis-master
192.168.60.48 nis-slave

修改 /etc/sysconfig/network
NISDOMAIN=example
YPSERV_ARGS="-p 1011"

修改 /etc/ypserv.conf
dns: no
files: 30
xfr_check_port: yes
#欄位說明
#[主機名稱/IP]: [NIS網域名稱] : [可用資料庫名稱]: [安全限制]
*                          : *       : shadow.byname    : port
*                          : *       : passwd.adjunct.byname : port
# *                        : *       : *                : none
127.0.0.0/255.255.255.0    : *       : *                : none
192.168.60.0/255.255.255.0   : *     : *                : none
*                            : *     : *                : deny

如果不想限制;主機、網域、資料庫設定*號就可以。


修改 /etc/sysconfig/yppasswdd
YPPASSWDD_ARGS="--port  1012"

NIS master 上修改 /var/yp/Makefile (通知 NIS Slave 更新資料庫):
# vi /var/yp/Makefile
NOPUSH=true --> false
如果沒有 slave 主機,這裡就不須修改

啟動服務:
# systemctl enable ypserv.service yppasswdd.service ypxfrd.service    //沒有 Slave 主機時,ypxfrd.service 不須啟動
# systemctl restart ypserv.service yppasswdd.service ypxfrd.service

檢查 NIS 服務啟動狀況
# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100004    2   udp   1011  ypserv
    100004    1   udp   1011  ypserv
    100004    2   tcp   1011  ypserv
    100004    1   tcp   1011  ypserv
    100009    1   udp   1012  yppasswdd

# rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting

建立帳號(可讓 Client 登入的 Home 目錄)及 YP 資料庫
建個讓 Client 登入的 Home 目錄
# mkdir /nishome
# mount -t nfs 192.168.60.50:/nishome /nishome    //掛載 user home 目錄到 NFS 主機,讓 nis user 登入時有 Home 目錄可使用。
PS:
我的 CentOS 7 是採最小安裝模式,
如出現: mount: wrong fs type, bad option, bad superblock...........
表示 NIS Client 端沒安裝 nfs 套件,需安裝: yum install -y nfs-utils

建測試帳號
# useradd -u 2001 -d /nishome/nistest1 nistest1

設定密碼:
# echo password | passwd --stdin nistest1

nis master 產生 YP 帳密資料庫
# /usr/lib64/yp/ypinit -m
nis slave 抄寫、同步 master 資料庫:
# /usr/lib64/yp/ypinit -s nis-master

驗證資料庫抄寫是否正常:
# ypcat -h localhost passwd.byname

新增、異動使用者,更新 YP 資料庫:
# make -C /var/yp/

手動 nis slave 抄寫、同步 master 資料庫:
# /usr/lib64/yp/ypinit -s nis-master


NIS slave 主機能夠讀取本機上的 passwd.byname 資料庫裡的帳號訊息表示已抄寫完成,NIS 主機就設定完成了。



參考資料: 鳥哥的 Linux 私房菜(NIS Server)



NIS Client 設定(可登入 Home 目錄)

NIS Client 端設定
安裝 NIS 套件:
# yum install -y ypbind yp-tools

設定 NIS 主機/IP Mapping:
# vi /etc/hosts
192.168.60.47 nis-master
192.168.60.48 nis-slave

使用 authconfig-tui 指令來設定 NIS Client
# authconfig-tui

選擇 Use NIS
輸入 NIS DOMAIN NAME
沒有問題,則會跳回系統畫面。
使用 authconfig-tui 設定後會修改的檔案
/etc/sysconfig/network
/etc/yp.conf
/etc/nsswitch.conf
/etc/sysconfig/authconfig
/etc/pam.d/system-auth

yptest 檢查 YP 資料庫:
# yptest
Test 1: domainname
Configured domainname is "example"

Test 2: ypbind
Used NIS server: nis-master

Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody)

Test 4: yp_first
nistest1 nistest1:$6$1eoh3eR2$Xi/89eufxYpzvu2JEOwRubzRouyV7RPPJYEu/M.qLPZqgQPP68VjpJVDYnejH1xNejaPdOBjtFBPatsX.dFGy1:2001:2001::/nishome/nistest1:/bin/bash

Test 5: yp_next

Test 6: yp_master
nis-master

Test 7: yp_order
1494484286

Test 8: yp_maplist
mail.aliases
protocols.byname
protocols.bynumber
netid.byname
services.byservicename
services.byname
rpc.bynumber
rpc.byname
hosts.byaddr
hosts.byname
group.bygid
group.byname
passwd.byuid
passwd.byname
ypservers

Test 9: yp_all
nistest1 nistest1:$6$1eoh3eR2$Xi/89eufxYpzvu2JEOwRubzRouyV7RPPJYEu/M.qLPZqgQPP68VjpJVDYnejH1xNejaPdOBjtFBPatsX.dFGy1:2001:2001::/nishome/nistest1:/bin/bash
1 tests failed

Test 9 如果有出現全部的帳號驗證就算OK了。
PS:
第三步驟出現的錯誤,出現在 passwd.byname 當中找不到 nobody 的字樣。
因為早期的 nobody 之 UID 都設定在 65534 ,
而 CentOS 將 nobody 設定為系統帳號的 99 ,所以不會被記錄,也就出現這一個警告,這個錯誤是可忽略的。

利用 ypwhich 驗證連線的 NIS 主機及資料庫數量:
# ypwhich      //將 nis-master 關閉,這時會看到驗證的主機變為 nis-slave

# ypwhich -x
Use "ethers"    for map "ethers.byname"
Use "aliases"    for map "mail.aliases"
Use "services"    for map "services.byname"
Use "protocols"    for map "protocols.bynumber"
Use "hosts"    for map "hosts.byname"
Use "networks"    for map "networks.byaddr"
Use "group"    for map "group.byname"
Use "passwd"    for map "passwd.byname"

利用 ypcat 讀取資料庫內容:
# ypcat -h <主機> <資料庫>
# ypcat passwd.byname


使用者端指令
變更密碼:
# yppasswd

設定 NIS Client mount 資料夾:
# mkdir /nishome
# mount -t nfs 192.168.60.47:/nishome   /nishome
PS:
我的 CentOS 7 是採最小安裝模式,
如出現: mount: wrong fs type, bad option, bad superblock...........
表示 NIS Client 端沒安裝 nfs 套件,需安裝: yum install -y nfs-utils

測試登入,能不能正常進入 Home 目錄:
su - nishome1

建立一個檔案,再到其他 NIS Client 電腦登入看能否看到檔案。 




NFS 設定搭配 NIS Users Home 目錄

設定 NIS Users Home 目錄
NFS 操作:
yum install -y nfs-utils rpcbind

NFS 伺服器的設定(192.168.60.50)
1.設定 NFS 伺服器開放的資源:
# mkdir /nishome
# vi /etc/exports
/nishome          192.168.60.0/24(rw,no_root_squash)

2.重新啟動 NFS
# systemctl enable nfs.service
# systemctl restart nfs.service
# showmount -e localhost

/nishome     192.168.60.0/24




2017年5月4日 星期四

CentOS 7 & Samba(File Server) 使用 SSSD 加入 Active Directory

一、CentOS 7 加入網域:
1.安裝相關套件:
yum install -y krb5-workstation realmd sssd samba-common adcli oddjob oddjob-mkhomedir samba samba-common-tools

2.查詢 AD 相關資訊及所需套件都已安裝:
realm discover tw.example
或者
realm list

3.Samba 加入 AD 網域
realm join tw.example --user administrator

Samba 退出 AD 網域
realm leave tw.example --user administrator

4.加入網域後,AD 上的帳號都可登入主機,若要限制可登入的使用者:
realm permit --all    #允許任何 AD 帳號登入
realm deny --all    #拒絕任何 AD 帳號登入
realm permit user@example.com    #允許使用UPN格式的 user 帳號登入
realm permit DOMAIN\\User2    #允許使用SAM格式的 user2 帳號登入
realm permit --withdraw user@example.com     #從主機刪除可登入的帳號
realm permit -g mis   #mis 群組可登入主機

5.查詢網域內使用者帳號資訊:
id tw\\hansen

6.修改 sssd.conf 帳號資訊服務:
[sssd]
domains = tw.example
config_file_version = 2
services = nss, pam

[domain/tw.example]
ad_domain = tw.example
krb5_realm = TW.EXAMPLE
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False    #登入時,不需輸入網域
fallback_homedir = /home/%d/%u    #登入後所自動建立的 home 目錄不會加上@DomainName
enumerate = True    #使用 getent 指令時,從LDAP查詢帳號資訊
access_provider = ad

7.重啟 sss 服務:
systemctl restart sssd.service

8.列出帳號資訊:
列出使用者:
getent passwd

列出群組:
getent group

二、Samba 加入網域:
1.修改 smb.conf:
[global]
        workgroup = TW
        realm = TW.EXAMPLE
        server string = Samba Server Version %v
        security = ADS
        kerberos method = secrets and keytab
        log file = /var/log/samba/log.%m
        max log size = 50
        idmap config * : backend = tdb
        cups options = raw

[homes]
        comment = Home Directories
        read only = No
        browseable = No
        root preexec = /opt/create-home.sh %S %H   #自動建立使用者 HOME 目錄 script

[MIS]
        comment = 資訊部
        path = /home/mis
        public = yes
       ;writable = yes
        valid users = @"資訊部門"
        write list = @"資訊部門"


2.自動建立使用者 HOME 目錄 script:
vi /opt/create-home.sh

#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

user=$1
group="domain users"
home=$2

if [ "$user" == "" ] || [ "$home" == "" ]; then
    exit 1
fi

if [ ! -d $home ]; then
    mkdir -m 700 -p $home 2>> /tmp/smb_err.log
    chown -Rf "$user:$group" $home 2>> /tmp/smb_err.log
fi

3.授予執行的權限:
chmod 700 /opt/create-home.sh

4.變更 MIS 目錄權值:
mkdir /home/mis
chown root:"資訊部門" -R /home/mis
chmod 775 -R /home/mis

5.重啟相關服務
systemctl restart sssd.service smb.service nmb.service
systemctl enable sssd.service smb.service nmb.service

6.測試使用者可不輸入密碼登入目錄

7.查看使用者使用情況:
smbstatus


2017年4月28日 星期五

Docker 改用 overlayFS 檔案系統

Docker 要改用 Overlay 檔案系統,系統的 kernel 必須是 kernel-3.18 以上,
kernel-3.10 不支援 Overlay 格式。

作業系統: CentOS 7

1.將 OverlayFS 加到 module 目錄下
echo "overlay" > /etc/modules-load.d/overlay.conf

2.載入 overlay module
modprobe overlay
或者
reboot

3.增加 docker repo
vi /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

4.安裝 Docker
yum install docker-engine

確認 selinux 狀態
sestatus -v

5.修改 Docker(v1.2...) Daemon 用 OverlayFS 啟動
vi /usr/lib/systemd/system/docker.service
[Service]
.....................
ExecStart=/usr/bin/dockerd --storage-driver=overlay
.....................

systemctl daemon-reload
systemctl start docker.service
systemctl enable docker.service

6.檢查是否使用 overlay
docker info | grep 'Storage Driver'

如果看到下列訊息表示己經使用 overlay:
Storage Driver: overlay

檢查 Container 和 OS 的磁碟空間,正常啟用 overlay 時,磁碟空間應該是一樣的。


2017年4月14日 星期五

Docker Swarm Cluster 及 WEB Load Balance 應用

操作主機 (CentOS 7):
docker1    192.168.60.201    #master + node 及 swarm management
docker2    192.168.60.202
docker3    192.168.60.203

三台全裝
yum install -y docker

master 執行
docker run --rm swarm create

會出現一串 Cluster ID 記下來,因為每次執行都會再產生不同的 cluster id。

node 執行
docker run -d swarm join --addr=192.168.60.201:2375 token://07956fde8d6cd1363d5ca0e3a403b136
docker run -d swarm join --addr=192.168.60.202:2375 token://07956fde8d6cd1363d5ca0e3a403b136
docker run -d swarm join --addr=192.168.60.203:2375 token://07956fde8d6cd1363d5ca0e3a403b136

node 執行
vi /etc/sysconfig/docker
OPTIONS='-H 0.0.0.0:2375 -H unix:///var/run/docker.sock'
systemctl restart docker.service

master 執行
2375 port 己經被 docker 使用,所以必須使用其他的 port 來管理 docker:

docker run -t -p 2376:2375 -t swarm manage token://07956fde8d6cd1363d5ca0e3a403b136

正常應出現三台 join 主機的訊息,按 Ctrl + C 跳脫

確認 join 主機
docker run --rm swarm list token://07956fde8d6cd1363d5ca0e3a403b136
docker -H 192.168.60.201:2376 info


主機重開機時,如果沒有設定讓 Container 隨主機開機啟動,都要手動啟動它。
利用下列指令 update 讓 Container 隨主機啟動:
查看 Container ID:
docker ps -a

update container:
docker update --restart=always Container_ID


測試:
1.master 本機執行(不是在 master 的 docker container 裡)
安裝 Nginx 套件:
yum install -y epel-release
yum install -y nginx

將下列程式碼加入 /etc/nginx/nginx.conf 中:

upstream nodes {
    server 192.168.60.203:8080 weight=1; #權重 = 1
    server 192.168.60.202:8080 weight=2; #權重 = 2
    server 192.168.60.201:8080 weight=3; #權重 = 3
}

server {
    listen 80;

    location / {
        proxy_pass http://nodes;
    }
}

2.master 從 docker.io PULL 測試網頁 image 裝到 node 上(有幾台 node 就執行幾次。我也不確定要這麼做嗎!!!!! 但我執行兩次只有兩台有 PULL。發現後再執行一次,三台 node 就都有 PULL 測試網頁了)

docker -H :2375 run -d -p 8080:80 cijie/haproxy-web-example:1.0.0

3.打開瀏覽器,輸入 master IP,就可看到 Container 的 ID 切換
http://192.168.60.201





2017年3月30日 星期四

CentOS 7 PowerDNS 安裝、設定


在 Linux 的平台上的 DNS 軟體 BIND 還是最多人使用,但有時想換個不同的 DNS 軟體嘗試看看 PowerDNS 是個不錯的選擇。安裝後,它利用瀏覽器來新增、刪除 DNS 的主機記錄。


一、PowerDNS 伺服器安裝設定
1.啟動 EPEL 套件:
yum install -y epel-release.noarch

2.安裝 mariadb,並設定開機啟動 mariadb
yum install -y mariadb-server mariadb

systemctl start mariadb.service
systemctl enable mariadb.service

3.設定 mariadb
mysql_secure_installation

4.安裝 PowerDNS 套件
yum install -y pdns pdns-backend-mysql

5.登入 mariadb Server,並建立一個db名稱為 powerdns
mysql -u root -p

建立 powerdns 資料庫:
MariaDB [(none)]> CREATE DATABASE powerdns CHARACTER SET utf8;

新增 db user: powerdns, password: pAssw0rd 並授予 powerdns 資料庫權限
MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'pAssw0rd';
MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'powerdns' IDENTIFIED BY 'pAssw0rd';
MariaDB [(none)]> FLUSH PRIVILEGES;

6.新增 powerdns DB tables 及為提高PowerDNS 查詢資料庫的速度,可以為 TABLE 建立一些必要的索引

use powerdns;

CREATE TABLE users (
id INTEGER NOT NULL AUTO_INCREMENT,
username VARCHAR(64) NOT NULL,
`password` VARCHAR(128) NOT NULL,
fullname VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
description TEXT NOT NULL,
perm_templ TINYINT NOT NULL,
active TINYINT NOT NULL,
use_ldap TINYINT NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

START TRANSACTION;
INSERT INTO users ( id, username, `password`, fullname, email, description, perm_templ, active, use_ldap )
VALUES ( 1, 'admin', '', 'Administrator', 'admin@example.net', 'Administrator with full rights.', 1, 1, 0 );
COMMIT;

CREATE TABLE perm_items (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(64) NOT NULL,
descr TEXT NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

START TRANSACTION;
INSERT INTO perm_items ( id, name, descr ) VALUES ( 41, 'zone_master_add', 'User is allowed to add new master zones.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 42, 'zone_slave_add', 'User is allowed to add new slave zones.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 43, 'zone_content_view_own', 'User is allowed to see the content and meta data of zones he owns.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 44, 'zone_content_edit_own', 'User is allowed to edit the content of zones he owns.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 45, 'zone_meta_edit_own', 'User is allowed to edit the meta data of zones he owns.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 46, 'zone_content_view_others', 'User is allowed to see the content and meta data of zones he does not own.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 47, 'zone_content_edit_others', 'User is allowed to edit the content of zones he does not own.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 48, 'zone_meta_edit_others', 'User is allowed to edit the meta data of zones he does not own.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 49, 'search', 'User is allowed to perform searches.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 50, 'supermaster_view', 'User is allowed to view supermasters.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 51, 'supermaster_add', 'User is allowed to add new supermasters.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 52, 'supermaster_edit', 'User is allowed to edit supermasters.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 53, 'user_is_ueberuser', 'User has full access. God-like. Redeemer.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 54, 'user_view_others', 'User is allowed to see other users and their details.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 55, 'user_add_new', 'User is allowed to add new users.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 56, 'user_edit_own', 'User is allowed to edit their own details.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 57, 'user_edit_others', 'User is allowed to edit other users.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 58, 'user_passwd_edit_others', 'User is allowed to edit the password of other users.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 59, 'user_edit_templ_perm', 'User is allowed to change the permission template that is assigned to a user.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 60, 'templ_perm_add', 'User is allowed to add new permission templates.' );
INSERT INTO perm_items ( id, name, descr ) VALUES ( 61, 'templ_perm_edit', 'User is allowed to edit existing permission templates.' );
COMMIT;

CREATE TABLE perm_templ (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(128) NOT NULL,
descr TEXT NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

START TRANSACTION;
INSERT INTO perm_templ ( id, name, descr )
VALUES ( 1, 'Administrator', 'Administrator template with full rights.' );
COMMIT;

CREATE TABLE perm_templ_items (
id INTEGER NOT NULL AUTO_INCREMENT,
templ_id INTEGER NOT NULL,
perm_id INTEGER NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

START TRANSACTION;
INSERT INTO perm_templ_items ( id, templ_id, perm_id )
VALUES ( 1, 1, 53 );
COMMIT;

CREATE TABLE zones (
id INTEGER NOT NULL AUTO_INCREMENT,
domain_id INTEGER NOT NULL,
owner INTEGER NOT NULL,
`comment` TEXT,
zone_templ_id INTEGER NOT NULL,
PRIMARY KEY (id),
KEY owner (owner)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE zone_templ (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(128) NOT NULL,
descr TEXT NOT NULL,
owner INTEGER NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE zone_templ_records (
id INTEGER NOT NULL AUTO_INCREMENT,
zone_templ_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
`type` VARCHAR(6) NOT NULL,
content VARCHAR(255) NOT NULL,
ttl INTEGER NOT NULL,
prio INTEGER NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE records_zone_templ (
domain_id INTEGER NOT NULL,
record_id INTEGER NOT NULL,
zone_templ_id INTEGER NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE migrations (
version VARCHAR(255) NOT NULL,
apply_time INTEGER NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX name_index ON domains (name);

這裡的 records table 網路上有很多文章介紹時,都少了一個 disabled 欄位。造成查詢本機的 DNS 設定時無法解析本機的 DNS 記錄。

CREATE TABLE records (
id INT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX nametype_index ON records (name,type);
CREATE INDEX domain_id ON records (domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);

CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;

CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);

CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);

CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB;

CREATE INDEX domainidindex ON cryptokeys (domain_id);

CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX namealgoindex ON tsigkeys (name, algorithm);

MariaDB [powerdns]> quit;

7.配置 powerdns.conf 設定檔,在底部新增下列參數
修改 launch=bind ---> launch=gmysql
並增加:
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=pAssw0rd
gmysql-dbname=powerdns
#query-logging=yes
allow-recursion=127.0.0.1, 172.16.10.0/24, 192.168.0.0/16      #設定允許遞迥查詢內部網段
recursor=8.8.8.8      #設定處理遞迥查詢的 DNS 伺服器

8.啟動 powerdns,並設定開機啟動
systemctl start pdns.service
systemctl enable pdns.service


二、PowerDNS WEB管理套件安裝設定
9.安裝 PowerDNS admin 所需的相依套件
yum install -y httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

10.安裝 PowerDNS admin 所需的 php pear 指令套件
yum install -y php-pear-DB php-pear-MDB2-Driver-mysql

11.啟動 apache,並設定開機啟動
systemctl start httpd.service
systemctl enable httpd.service

12.下載 PowerDNS admin source 安裝程式
cd /var/www/html

13.解壓縮下載的 PowerDNS source檔
tar -xvf poweradmin-2.1.7.tgz
ln -sf poweradmin-2.1.7 poweradmin
chown -R apache:apache /var/www/html/poweradmin/

14.利用瀏覽器開始設定 PowerDNS,網址列輸入
http://192.168.60.47/poweradmin/install

15.PowerDNS 設定 step1,選擇使用的語系(設定畫面沒有繁中可選)

16.PowerDNS 設定 step 2,宣告會清除剛才新增的 PowerDNS 資料庫內所有資料,但不會刪除 tables
直接按 --> go to step 3

17.PowerDNS 設定 step 3,輸入 db username、password、db name

18.PowerDNS 設定 step 4,新增一個使用者帳號,用於 Poweradmin 資料同步

19.PowerDNS 設定 step 5,新增使用者

這裡要使用 SSH 連線工具登入 PowerDNS 主機上的 mariadb:
mysql -u root -p

新增同步、更新、刪除 DNS 資料的帳號:
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE ON powerdns.* TO 'powermain'@'localhost' IDENTIFIED BY 'pAssw0rd';

完成後,按 --> go to step 6

20.PowerDNS 設定 step 6,使用 SSH 連線工具登入 PowerDNS 主機,手動在 PowerDNS 新增一個 config.inc.php,
cd /var/www/html/powerdns/inc
mv config-me.inc.php config.inc.php
vi config.inc.php

依下列的訊息,修改 config.inc.php 檔案:
內容:
$db_host                = 'localhost';
$db_port                = '';
$db_user                = 'powermain';
$db_pass                = 'pAssw0rd';
$db_name                = 'powerdns';
$db_type                = 'mysql';
$db_layer               = 'PDO';

$session_key            = '40b8z0lJd}VntE_aiDlt27_dsnzK+AoyTth{_$*Yder@sd';

$iface_lang             = 'en_EN';

$dns_hostmaster         = 'powerdns.ddns.net';
$dns_ns1                = 'ns1.powerdns.ddns.net';
$dns_ns2                = 'ns2.powerdns.ddns.net ';

完成後按 go to step 7 就可以關閉設定畫面。

21.啟用 dynamic DNS 更新權限
cd /var/www/html/poweradmin
cp install/htaccess.dist .htaccess

22.修改 httpd.conf,開啟 mod_rewrite
vi /etc/httpd/conf.modules.d/00-base.conf
確認 Apache 有載入 mod_rewrite 模組:
LoadModule rewrite_module modules/mod_rewrite.so

23.刪除 install 目錄
rm -rf /var/www/html/poweradmin/install/

24.登入 PowerDNS 管理介面
http://192.168.60.47/poweradmin

登入 PowerDNS 管理網頁,username 欄位輸入 admin
密碼就是前面 step 3 設定的密碼。


三、建立正解區域
25.新增 master zone




26.新增 master zone 後,選擇 <List zones>


繼續新增 DNS record

27.若要刪除一個 ZONE 或者 是一筆 DNS 記錄,只要按 垃圾筒圖示,即可將之刪除


四、建立反解區域
28.一樣選擇 <Add master zone>

29.新增一台反解記錄

30.建立正解主機記錄時,順便新增反解記錄

、建立 slave DNS
依照 master DNS 安裝的套件安裝後,修改 master、slave DNS 主機的 pdns.conf 設定檔

額外修改 pdns.conf 設定檔
master DNS:
pdns.conf --> master=yes

slave DNS:
pdns.conf --> slave=yes
再新增一個slave zone,就會自動從 master DNS 同步


PowerAdmin 管理頁面修改 zone type 類型:

六、測試設定
測試 PowerDNS 設定
[root@powerdns ~]# ss -ntupl

[root@powerdns ~]# dig @127.0.0.1 powerdns.ddns.net ns

[root@powerdns ~]# dig @localhost ns hinet.net









2017年3月5日 星期日

CentOS 7 安裝 Plex Media Server

下載 Plex Server 套件

CentOS 64bit 套件:

安裝 Plex 套件:

設定開機啟動:
systemctl enable plexmediaserver.service
systemctl start plexmediaserver.service

到 Plex 官網註冊一個帳號:

註冊後第一次登入自己的 Plex Server 要在同一網段:
http://local_ip_address:32400/web

之後可以利用免費的 DNS 服務註冊一個網址,就可以使用網址連線了。 

設定從外部連線 Plex Server:
1.防火牆設備要設定 NAT 埠號 32400 從外部進入到內部 Plex Server
2.設定 Plex Server 使用固定連線埠號

3.在主機內新增一個資料夾存放媒體檔案,上傳多媒體檔案
mkdir /PlexMedia

4.回到 Plex Server 網頁首頁


依步驟選擇剛才新增的資料夾,到這就己經可以使用 Plex Client 軟體 或者直接利用瀏覽器連線觀賞


5.有時明明有放檔案到媒體庫,但就是無法看到檔案。可以調整一下掃描器設定試試。



2017年3月3日 星期五

openshift OC 指令部署 CentOS 7



要使用 openshift Enterprise 系統,必須先註冊一個帳號及等待開通帳號的通知

openshift 網址:
https://www.openshift.com/?sc_cid=7016000000128KfAAI&gclid=Cj0KEQiAot_FBRCqt8jVsoDKoZABEiQAqFL76AwuqrAKItlr6RUqwcFz_gxzdOuhd8_OJw6tKwjUaQ0aAtfL8P8HAQ

收到帳號開通的通知後就可以登入 openshift Enterprise WEB 介面了。

下載 OC 執行檔
for Linux
for Linux
將下載的壓縮檔解壓縮,把 oc 放到系統 path 環數變數下的任一目錄下
登入 openshift:
(openshift 右上角 <Command Line Tools> 頁面裡的 login 連結網址)
oc login https://api.preview.openshift.com --token=...click to show token...

for Windows
for Windows
將下載的壓縮檔解壓縮,把 oc.exe 放到系統 path 環數變數下的任一目錄下
開啟 DOS 視窗:
(openshift 右上角 <Command Line Tools> 頁面裡的 login 連結網址)
oc login https://api.preview.openshift.com --token= ...click to show token...

到此順利的話,就已經登入 openshift 管理後台。



部署一個空的 CentOS 7 系統
oc run centos7 --image=centos /usr/sbin/init

查尋看有哪些 pods
oc get pods

登入 pod
oc exec -it <pod name> sh

或啟動後在 WEB 上也可以登入 terminal





2017年3月1日 星期三

CentOS 7 安裝 iSCSI Server

SERVER 端:
yum 安裝 iSCSI 套件
yum install -y targetcli

防火牆如果沒有關掉,必須打開 iSCSI 所使用的 Port
firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload

啟動 iSCSI 服務
systemctl start target.service
systemctl enable target.service

建一個資料夾存放測試的虛擬磁碟影像檔
mkdir /iscsi_disks

產生二個虛擬磁碟影像檔
dd if=/dev/zero of=/iscsi_disks/linux-disk.img bs=1M count=1024
dd if=/dev/zero of=/iscsi_disks/windows-disk.img bs=1M count=1024

登入 iSCSI 管理介面
targetcli

iSCSI 的設定架構


建立 iSCSI 檔案連結要分享的虛擬磁碟影像檔
iSCSI 磁碟有四種類型可以選擇:
cd backstores/
fileio/ create linux-disk /iscsi_disks/linux-disk.img
block/ create windows-disk /iscsi_disks/windows-disk.img
類型:
block         #用 block 方式分享
fileio          #將檔案建於 file system 之上, 再通過 iSCSI 當做 block device 分享出去
pscsi         #連結的設備原本就是 iSCSI 設備時,選 pscsi
remdisk    #不需長久儲存時,可用 ramdisk 分享

建立 iSCSI target 名稱
cd /iscsi
iscsi> create iqn.2017-03.company.tw:linux.disk     #這邊的網域名稱要反轉輸入,也可以直接輸入 create 讓它自動產生
iscsi> create iqn.2017-03.company.tw:windows.disk

建立 ACL(access control list) 存取清單,iSCSI 預設是不讓任何人存取,所以必須設定存取名單
cd iscsi/iqn.2017-03.company.tw:linux.disk/tpg1/acls
create iqn.2017-03.company.tw:linux-pc    #client 連線時所要設定的[啟動器名稱 || InitiatorName]
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1/acls
create iqn.2017-03.company.tw:windows-pc

連結 LUN
cd /iscsi/iqn.2017-03.company.tw:linux.disk/tpg1/luns
create /backstores/fileio/linux-disk
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1/luns
create /backstores/block/windows-disk

建立 portal (iSCSI 預設會建立一個 0.0.0.0:3260 如無特殊要求使用預設值即可)
cd /iscsi/iqn.2017-03.company.tw:linux.disk/tpg1/portals
create 192.168.60.160    #可以直接輸入 create 讓它自動產生
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1/portals
create 192.168.60.160

若出現 <Could not create NetworkPortal in configFS>,表示系統已先建立 0.0.0.0:3260 的 portal
先刪除舊的 portal 建立新的
cd /iscsi/iqn.2017-03.company.tw:linux.disk/tpg1/portals/
delete 0.0.0.0 3260

存檔、離開
cd /
saveconfig
exit

完成的設定:


其他設定:
關閉 tpg1 密碼驗證       #連線時,server messages log 出現 <Target is enforcing iSCSI Authentication, login failed> 登入失敗,可關閉 authentication 驗證來測試
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1
set attribute authentication=0

關閉 tpg1 的 ACL
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1
set attribute generate_node_acls=0

如要設定 iSCSI 連線密碼
targetcli
cd /iscsi/iqn.2017-03.company.tw:windows.disk/tpg1/acls/iqn.2017-03.company.tw:windows-pc/
#Linux Client 設定密碼
set auth userid=usr
set auth password=pwd
get auth


Windows 用戶端:
(Windows 7 正常連線,Windows 10、2012 要一直重試,需要一點運氣)
控制台 > 系統管理工具 > iSCSI 啟動器 > 設定 <啟動器名稱>
輸入:
iqn.2017-03.company.tw:windows-pc    #名稱要與 Server iSCSI 建立 ACL 設定的名稱相同
(為了測試方便,Linux iSCSI Server 裡把 windows.disk 的 password 驗證關閉了)



電腦 > 管理 > 磁碟管理,會多出一個<未配置>的磁區




Linux 用戶端:
安裝 iSCSI Client 軟體
yum install -y iscsi-initiator-utils

編輯設定檔
vi /etc/iscsi/initiatorname.iscsi
內容:
InitiatorName=iqn.2017-03.company.tw:linux-pc    #名稱要與 Server iSCSI 建立 ACL 設定的名稱相同

重啟用戶端
systemctl restart iscsid.service

搜找可用的 iscsi server 分享的設備
iscsiadm -m discovery -t st -p 192.168.60.160


登入or登出 iscsi 設備
iscsiadm -m node -T iqn.2017-03.company.tw:linux.disk -p 192.168.60.160 --[login | logout]

觀察線後是否有多出一個硬碟
# fdisk -l

# file /dev/sdb

格式化及掛載 iscsi 硬碟
mkdir /iscsidisk
mkfs.xfs /dev/sdb
mount /dev/sdb /iscsidisk

開機掛載 iSCSI
先查詢 id 碼:
blkid | grep /dev/sdb
/dev/sdb: UUID="eb9cbf2f-fce8-413a-b770-8b0f243e8ad6" TYPE="xfs"

vi /etc/fstab
/dev/sdb: UUID=eb9cbf2f-fce8-413a-b770-8b0f243e8ad6 /iscsidisk xfs default,_netdev 0 0

刪掉不要的iscsi target

# iscsiadm -m node -o delete -T iqn.2017-03.company.tw:linux.disk



2017年2月9日 星期四

Kubernetes ETCD Cluster 設定

Kubernetes 架構主機環境:
在 /etc/hosts 新增:
192.168.60.153 c7-k8s01    #master
192.168.60.154 c7-k8s02
192.168.60.155 c7-k8s03
192.168.60.156 c7-k8s04

TECD Cluster 設定
每台 kubernetes node 都要安裝 etcd 套件
yum install -y etcd

第一台叢集設定:
/etc/etcd/etcd.conf
ETCD_NAME=etcd01
ETCD_DATA_DIR="/var/lib/etcd/etcd01"
ETCD_LISTEN_PEER_URLS="http://192.168.60.153:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.60.153:2379,http://127.0.0.1:2379 "
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.60.153:2380"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.60.153:2380,etcd02=http://192.168.60.154:2380,etcd03=http://192.168.60.155:2380"    #初始 Cluster 成員列表
ETCD_INITIAL_CLUSTER_STATE="new"    #初始 Cluster 狀態,new 為新建 Cluster
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"    # Cluster 名稱
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.60.153:2379"

第二台叢集設定:
ETCD_NAME=etcd02
ETCD_DATA_DIR="/var/lib/etcd/etcd02"
ETCD_LISTEN_PEER_URLS="http://192.168.60.154:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.60.154:2379,http://127.0.0.1:2379 "
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.60.154:2380"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.60.153:2380,etcd02=http://192.168.60.154:2380,etcd03=http://192.168.60.155:2380"    #初始 Cluster 成員列表
ETCD_INITIAL_CLUSTER_STATE="new"    #初始 Cluster 狀態,new 為新建 Cluster
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"    # Cluster 名稱
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.60.154:2379"

第三台叢集設定:
ETCD_NAME=etcd03
ETCD_DATA_DIR="/var/lib/etcd/etcd03"
ETCD_LISTEN_PEER_URLS="http://192.168.60.155:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.60.155:2379,http://127.0.0.1:2379 "
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.60.155:2380"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.60.153:2380,etcd02=http://192.168.60.154:2380,etcd03=http://192.168.60.155:2380"    #初始 Cluster 成員列表
ETCD_INITIAL_CLUSTER_STATE="new"    #初始 Cluster 狀態,new 為新建 Cluster
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"    # Cluster 名稱
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.60.155:2379"

修改啟動設定檔
/usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd \
--name=\"${ETCD_NAME}\" \
--data-dir=\"${ETCD_DATA_DIR}\" \
--listen-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" \
--advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" \
--initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\" \
--initial-cluster=\"${ETCD_INITIAL_CLUSTER}\"  \
--initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\" \
--listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\""
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy
=multi-user.target

啟動 ETCD 服務
    systemctl restart etcd.service
    systemctl enable etcd.service
    systemctl status etcd.service

觀察 ETCD Cluster 狀態
# etcdctl member list
4be996007148b4a5: name=etcd01 peerURLs=http://192.168.60.153:2380 clientURLs=http://192.168.60.153:2379 isLeader=true
4f79c66abde833f4: name=etcd02 peerURLs=http://192.168.60.154:2380 clientURLs=http://192.168.60.154:2379 isLeader=false
5b938308c73bbf65: name=etcd03 peerURLs=http://192.168.60.155:2380 clientURLs=http://192.168.60.155:2379 isLeader=false

# etcdctl cluster-health
member 4be996007148b4a5 is healthy: got healthy result from http://192.168.60.153:2379
member 4f79c66abde833f4 is healthy: got healthy result from http://192.168.60.154:2379
member 5b938308c73bbf65 is healthy: got healthy result from http://192.168.60.155:2379

將 master apiserver 設定指向 etcd cluster 成員
vi /etc/kubernetes/apiserver
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.60.153:2380,etcd02=http://192.168.60.154:2380,etcd03=http://192.168.60.155:2380"


新增 etcd cluster 節點:etcd04
ETCD_INITIAL_CLUSTER_STATE 初始化值全部為 new,後續加入的 TECD 成員依
etcdctl member add <TECD_NAME> http://new_etcd_cluster:2380
指令產生的設定值來修改 etcd.conf 設定檔

在已有 Cluster 增加新節點 etcd04 的資料
etcdctl member add etcd04 http://192.168.60.156:2380

Added member named etcd04 with ID 4054n89e532b87bc to cluster

ETCD_NAME="etcd04"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.60.153:2380,etcd02=http://192.168.60.154:2380,etcd03=http://192.168.60.155:2380,etcd04=http://192.168.60.156:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

增加新的節點資料後產生配置 ETCD_NAME、ETCD_INITIAL_CLUSTE、ETCD_INITIAL_CLUSTER_STATE 用於新的 etcd04 設定檔
修改 /etc/etcd/etcd.conf 設定檔:
ETCD_NAME=etcd04
ETCD_DATA_DIR="/var/lib/etcd/etcd04"
ETCD_LISTEN_PEER_URLS="http://192.168.60.156:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.60.156:2379,http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.60.156:2380"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.60.153:2380,etcd02=http://192.168.60.154:2380,etcd03=http://192.168.60.155:2380,etcd04=http://192.168.60.156:2380"    #每台的 etcd.conf 都必須修改 
ETCD_INITIAL_CLUSTER_STATE="existing"    #existing 表示加入己存在的 Cluster
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.60.156:2379"

啟動 etcd 服務可以查看 Cluster 多了一個新的節點 etcd04
systemctl restart etcd.service
systemctl enable etcd.service

觀察是否出現新加入的 etcd cluster 成員
etcdctl member list
4be996007148b4a5: name=etcd01
4f79c66abde833f4: name=etcd02
5b938308c73bbf65: name=etcd03
a153e6ec785245d6: name=etcd04

確認 etcd cluster 狀態
etcdctl cluster-health
member 4be996007148b4a5 is healthy
member 4f79c66abde833f4 is healthy
member 5b938308c73bbf65 is healthy

member a153e6ec785245d6 is healthy

CentOS 7 部署 Kubernetes

Kubernetes 架構主機環境:
在 /etc/hosts 新增:
192.168.60.153 c7-k8s01    #master
192.168.60.154 c7-k8s02
192.168.60.155 c7-k8s03
192.168.60.156 c7-k8s04

關閉防火牆
systemctl stop firewalld
systemctl disable firewalld

安裝 ntp 套件
yum install ntp
systemctl start ntpd
systemctl enable ntpd

設定 kubernetes master:
安裝 kubernetes 套件
yum install -y etcd kubernetes flannel

修改 /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.60.153:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.60.153:2379 "

ETCD_ADVERTISE_CLIENT_URLS="http://192.168.60.153:2379"

修改 /etc/sysconfig/docker
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io --log-driver=journald'

修改 /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.60.153:8080"

修改 /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_MASTER="--master=http://192.168.60.153:8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.60.153:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
KUBE_API_ARGS=""

修改 /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=c7-k8s01"
KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

啟動 ETCD、kubernetes 服務
for SERVICES in etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES
done

修改 /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.60.153:2379"

設定 etcd.conf 結合 flannel 服務
etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

再重啟動 ETCD、kubernetes 服務
for SERVICES in etcd flanneld docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES
done

檢查 kubernetes master 是否正常運作
kubectl get nodes      #出現 kubetnetes master node 名稱

遇到的問題:
/var/log/messages 一直出現:
the cluster IP 172.16.0.1 for service kubernetes/default is not within the service CIDR 10.254.0.0/16; please recreate
利用 kubectl get services --all-namespaces 顯示與設定的 cluster ip 網段不同
所以利用 kubectl delete services/kubernetes 將原來的設定刪除,kubernetes 會自動產生新的
再用 kubectl get services --all-namespaces 檢查一遍
/var/log/messages 己無錯誤訊息


以下所有安裝、設定步驟需在每一台 kubernetes nodes 上執行(在不同台 node 執行時會特別標註)
設定 kubernetes nodes:
安裝 flannel、kubernetes
yum install -y flannel kubernetes

修改 /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.60.153:2379"      #新版本改為 FLANNEL_ETCD_ENDPOINTS 參數

修改 /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.60.153:8080"      #輸入 kubernetes master 主機 IP

修改 /etc/kubernetes/kubelet    #在 c7-k8s02 修改
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname_override=c7-k8s02"
KUBELET_API_SERVER="--api_servers=http://192.168.60.153:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

修改 /etc/kubernetes/kubelet    #在 c7-k8s03 修改
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname_override=c7-k8s03"
KUBELET_API_SERVER="--api_servers=http://192.168.60.153:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

設定啟動 kube-proxy kubelet docker flanneld
systemctl daemon-reload
for SERVICES in kubelet kube-proxy docker flanneld; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES
done
或者
systemctl daemon-reload
for SERVICES in kubelet kube-proxy docker flanneld; do
    systemctl restart $SERVICES
    systemctl status $SERVICES
done

遇到的問題:
/var/log/messages 一直出現:
unable to communicate with Rkt api service: rkt: cannot tcp Dial rkt api service: dial tcp 127.0.0.1:15441: getsockopt

解決方法:在安裝、設定 flannel 之前,docker 己經先安裝並設定好了,有可能會出現上面的錯訊訊息,這時必須刪掉舊的 docker 網路介面:
systemctl stop docker
ip link delete docker0
systemctl start docker
ip -4 a|grep inet


kubernetes 內建的主機狀態監控網頁
https://host_ip:4194

GPO policy 設定預設應用程式﹝設定預設關聯設定檔﹞

建立xml設定檔,並將其啟用 Computer Configuration\Administrative Templates\Windows Components\File Explorer 設定檔內容將會新增到User電腦regedit機碼位址 HKLM\Software\Po...