安裝簡易OpenShift單節點並配置DNS泛域名
阿新 • • 發佈:2020-12-29
## 1 楔子
公司有個專案部署在 OpenShift 容器雲平臺上,出現問題較多,於是萌生在公司環境搭建現場模擬環境,由於資源沒有生產環境多,就使用單節點簡單模擬下
本文主要內容包括以下:
1. 使用 Dnsmasq 實現 OpenShift 平臺的內網域名解析
2. 使用 oc 命令列工具初始化 OpenShift 3.9 單主機
## 2 規劃
OpenShift基礎服務約佔4GB左右記憶體,由於使用 oc 進行初始化 OpenShift,所以不能叢集擴容,又因為公司專案記憶體佔用太大,所以與運維老哥協調了高配伺服器。
硬體:
| CPU型號 | 核心數 | 記憶體 | 硬碟 |
| ----------------------------------------- | ------ | ----- | ---- |
| Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz | 30C | 125GB | 4TB |
軟體:
| 軟體名 | 版本 |
| ---------- | ----------------------- |
| CentOS | release 7.7.1908 (Core) |
| Docker | 18.03.1-ce |
| OpenShift | v3.9.71 |
| Kubernetes | v1.9.1 |
| Dnsmasq | 2.76-10.el7_7.1 |
> - k8s是 OpenShift 自動安裝的,版本比較低,高版本可自行參考官方文件。
>
> - 主機系統、Docker等本文不再累述
## 3 安裝配置OpenShift
### 3.1 配置oc命令列工具
下載 oc 客戶端工具:https://github.com/openshift/origin/releases,由於現場提供了3.9.71版本的客戶端,和這個版本區別不大,讀者可用這個版本操作。
![](https://img2020.cnblogs.com/blog/1149398/202012/1149398-20201229112310767-1884275922.png)
```bash
mkdir openshift && cd /home/openshift
curl -Lo oc-3.11.linux.tar.gz https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz
tar xvf oc-3.11.linux.tar.gz
mv oc /usr/local/bin
#驗證
oc version
#bash補全,執行完成重新login下shell
yum install bash-completion
oc completion bash > /etc/bash_completion.d/oc
```
![](https://img2020.cnblogs.com/blog/1149398/202012/1149398-20201229112746766-613074188.png)
### 3.2 啟動OpenShift
```bash
mkdir -p /data1/openshift
oc cluster up \
--use-existing-config=true \
--skip-registry-check=true \
--host-config-dir='/data1/openshift/config' \
--host-data-dir='/data1/openshift/data' \
--host-pv-dir='/data1/openshift/pv' \
--host-volumes-dir='/data1/openshift/volumes' \
--public-hostname='openshift.cnxx' \
--routing-suffix='dev.cnxx'
```
>- --host 開頭的參考都是指定寫到本機的目錄位置,我的環境/data1硬碟空間大
>- --public-hostname 指定後續 DNS 對映的域名
>- --routing-suffix 指定部署服務的域名字尾,如 test-app.dev
>- 域名需要注意下,如果不作上游域名代理用什麼域名都行,如果用了上游的代理,可能會被瀏覽器視為網路攻擊攔截掉,提前使用dig命令嘗試下
```bash
#預設無密OpenShift超級管理員
oc login -u system:admin
#建立叢集管理員使用者
htpasswd -c /data1/openshift/admin-htpasswd cluster-admin
#新增叢集管理員許可權
oc adm policy add-cluster-role-to-user cluster-admin cluster-admin
#建立專案
oc new-project hyhbbb --display-name='開發環境' #display-name可使用中文
#新增專案使用者
htpasswd -c /data1/openshift/hyhbbb-htpasswd hyhbbb
oc adm policy add-role-to-user admin hyhbbb -n hyhbbb
```
使用者角色許可權參考:
![](https://img2020.cnblogs.com/blog/1149398/202012/1149398-20201229132237988-1473527740.png)
## 4 安裝配置 Dnsmasq
Dnsmasq是一款DNS解析軟體,適用於少量使用者使用,有配置簡單等優點。由於踩過了Bind9的坑,這裡直接用 Dnsmasq 配置域名解析。
```bash
#安裝dnsmasq
yum install -y dnsmasq
```
Dnsmasq 預設讀取的是 /etc/hosts 作優先解析,使用 /etc/resolv.conf 作預設上游 DNS 伺服器,這裡就不修改 `/etc/hosts` 與 `/etc/resolv.conf` 了
```bash
[root@server-127 openshift]# egrep -v "^#|^$" /etc/dnsmasq.conf
strict-order #使用嚴格順序查詢
listen-address=127.0.0.1,10.2.41.127 #dnsmasq監聽地址,也可以通過其他引數指定網絡卡
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig #預設的配置檔案,未動
address=/openshift.cnxx/10.2.41.127 #解析域名到10.2.41.127
address=/dev.cnxx/10.2.41.127 #解析dev.cnxx字尾的泛域名到10.2.41.127
```
重啟服務
```bash
systemctl restart dnsmasq
```
驗證
```bash
yum install bind-utils
[root@server-127 openshift]# dig openshift.cnxx
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> openshift.dev
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16855
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;openshift.cnxx. IN A
;; ANSWER SECTION:
;openshift.cnxx. 0 IN A 10.2.41.127
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 二 12月 29 13:54:55 CST 2020
;; MSG SIZE rcvd: 47
```
## 5 訪問測試
![](https://img2020.cnblogs.com/blog/1149398/202012/1149398-20201229162423457-1431807882.png)
## 6 Q&A
Q1: `oc login -u system:admin` 提示需要密碼
A1: 參考如下方法:
```bash
vim /etc/profile
export KUBECONFIG=/data1/openshift/config/master/admin.kubeconfig
export CURL_CA_BUNDLE=/data1/openshift/config/master/ca.crt
source /etc/profile
```
---
Q2: `htpasswd` 命令未找到
A2: 安裝 httpd
```bash
yum install -y httpd
```
`htpasswd` 引數:
```bash
-c 建立passwdfile.如果passwdfile 已經存在,那麼它會重新寫入並刪去原有內容.
-n 不更新passwordfile,只將加密後的使用者名稱密碼顯示在螢幕上;
-m 預設採用MD5演算法對密碼進行加密
-d 採用CRYPT演算法對密碼進行加密
-p 不對密碼進行進行加密,即使用普通文字格式的密碼
-s 採用SHA演算法對密碼進行加密
-b 命令列中一併輸入使用者名稱和密碼而不是根據提示輸入密碼,可以看見明文,不需要互動
-D 刪除指定的使用者
```
---
Q3: `htpasswd` 建立的使用者怎麼刪除?
A3: 使用 `htpasswd -d 使用者名稱`
---
Q4: 如圖,不是私密連線是正常的,但是沒有入口
![](https://img2020.cnblogs.com/blog/1149398/202012/1149398-20201229161855364-937104863.png)
A4: 此種情況是由於此域名已被使用,請更換域名或去除上游DNS代理(去除上游代理可能就上不了網了)
## 參考
https://blog.csdn.net/xiongzaiabc/article/details/105005412
https://my.oschina.net/u/4384701/blog/3386402
https://www.cnblogs.com/sammyliu/p/100836