Kubernetes Dashboard як воситаи осони истифодашаванда барои гирифтани маълумоти нав дар бораи кластери коркунанда ва идоракунии ҳадди ақали он мебошад. Шумо онро боз ҳам бештар қадр мекунед, вақте ки дастрасӣ ба ин қобилиятҳо на танҳо ба маъмурон/муҳандисони DevOps, балки ба онҳое, ки ба консол камтар одат кардаанд ва/ё ният надоранд, ки бо ҳама нозукиҳои ҳамкорӣ бо kubectl ва дигар коммуналй. Ин бо мо рӯй дод: таҳиягарон мехостанд ба веб-интерфейси Kubernetes дастрасии зуд дошта бошанд ва азбаски мо GitLab-ро истифода мебарем, ҳалли худ ба худ омад.
Чаро ин аст?
Таҳиягарони мустақим метавонанд ба асбобе ба монанди K8s Dashboard барои ислоҳи вазифаҳо таваҷҷӯҳ кунанд. Баъзан шумо мехоҳед, ки гузоришҳо ва захираҳоро бубинед ва баъзан подкҳоро кушед, Deployments/StatefulSets-ро миқёс кунед ва ҳатто ба консоли контейнер равед (инчунин дархостҳо мавҷуданд, ки барои онҳо роҳи дигар вуҷуд дорад - масалан, тавассути
Илова бар ин, барои менеҷерҳо як лаҳзаи равонӣ вуҷуд дорад, ки онҳо мехоҳанд ба кластер нигоҳ кунанд - бубинанд, ки "ҳама чиз сабз аст" ва ба ин васила худро итминон диҳанд, ки "ҳама чиз кор мекунад" (ки ин, албатта, хеле нисбӣ аст... аммо ин аз доираи мақола берун аст).
Ҳамчун як системаи стандартии CI мо дорем
Ман инчунин қайд мекунам, ки мо NGINX Ingress-ро истифода мебарем. Агар шумо бо дигарон кор кунед
Кӯшиши ҳамгироӣ
Насби панели асбобҳо
Диққат: Агар шумо қадамҳои зерро такрор карданӣ бошед, пас - барои пешгирӣ кардани амалҳои нолозим - аввал ба зерсарлавҳаи оянда хонед.
Азбаски мо ин ҳамгироиро дар бисёр насбҳо истифода мебарем, мо насби онро автоматӣ кардем. Сарчашмаҳое, ки барои ин заруранд, дар интишор шудаанд
Скрипт панели идоракуниро дар кластер насб мекунад ва онро барои ҳамгироӣ бо GitLab танзим мекунад:
$ ./ctl.sh
Usage: ctl.sh [OPTION]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Install kubernetes-dashboard to Kubernetes cluster.
Mandatory arguments:
-i, --install install into 'kube-system' namespace
-u, --upgrade upgrade existing installation, will reuse password and host names
-d, --delete remove everything, including the namespace
--gitlab-url set gitlab url with schema (https://gitlab.example.com)
--oauth2-id set OAUTH2_PROXY_CLIENT_ID from gitlab
--oauth2-secret set OAUTH2_PROXY_CLIENT_SECRET from gitlab
--dashboard-url set dashboard url without schema (dashboard.example.com)
Optional arguments:
-h, --help output this message
Аммо, пеш аз истифодаи он, шумо бояд ба GitLab гузаред: Минтақаи маъмур → Барномаҳо - ва замимаи навро барои панели оянда илова кунед. Биёед онро "панели панели кубернетес" меномем:
Дар натиҷаи илова кардани он, GitLab хэшҳоро таъмин мекунад:
Онҳо ҳамонҳоянд, ки ҳамчун далели скрипт истифода мешаванд. Дар натиҷа, насб чунин менамояд:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e… --oauth2-secret 6b79168f… --dashboard-url dashboard.example.com
Пас аз он, биёед тафтиш кунем, ки ҳама чиз оғоз шудааст:
$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp 1/1 Running 0 14s
oauth2-proxy-5586ccf95c-czp2v 1/1 Running 0 14s
Аммо дер ё зуд ҳама чиз оғоз мешавад иҷозат фавран кор намекунад! Гап дар он аст, ки дар тасвири истифодашуда (вазъият дар дигар тасвирҳо ба ин монанд аст) раванди гирифтани масир дар занги бозгашт нодуруст амалӣ карда мешавад. Ин ҳолат ба он оварда мерасонад, ки oauth кукиеро, ки худи oauth ба мо медиҳад, нест мекунад...
Мушкилот тавассути сохтани тасвири oauth худ бо ямоқи ҳал карда мешавад.
Oauth-ро часпонед ва аз нав насб кунед
Барои ин, мо Dockerfile-ро истифода мебарем:
FROM golang:1.9-alpine3.7
WORKDIR /go/src/github.com/bitly/oauth2_proxy
RUN apk --update add make git build-base curl bash ca-certificates wget
&& update-ca-certificates
&& curl -sSO https://raw.githubusercontent.com/pote/gpm/v1.4.0/bin/gpm
&& chmod +x gpm
&& mv gpm /usr/local/bin
RUN git clone https://github.com/bitly/oauth2_proxy.git .
&& git checkout bfda078caa55958cc37dcba39e57fc37f6a3c842
ADD rd.patch .
RUN patch -p1 < rd.patch
&& ./dist.sh
FROM alpine:3.7
RUN apk --update add curl bash ca-certificates && update-ca-certificates
COPY --from=0 /go/src/github.com/bitly/oauth2_proxy/dist/ /bin/
EXPOSE 8080 4180
ENTRYPOINT [ "/bin/oauth2_proxy" ]
CMD [ "--upstream=http://0.0.0.0:8080/", "--http-address=0.0.0.0:4180" ]
Ва ин аст, ки худи ямоқи rd.patch чӣ гуна аст
diff --git a/dist.sh b/dist.sh
index a00318b..92990d4 100755
--- a/dist.sh
+++ b/dist.sh
@@ -14,25 +14,13 @@ goversion=$(go version | awk '{print $3}')
sha256sum=()
echo "... running tests"
-./test.sh
+#./test.sh
-for os in windows linux darwin; do
- echo "... building v$version for $os/$arch"
- EXT=
- if [ $os = windows ]; then
- EXT=".exe"
- fi
- BUILD=$(mktemp -d ${TMPDIR:-/tmp}/oauth2_proxy.XXXXXX)
- TARGET="oauth2_proxy-$version.$os-$arch.$goversion"
- FILENAME="oauth2_proxy-$version.$os-$arch$EXT"
- GOOS=$os GOARCH=$arch CGO_ENABLED=0
- go build -ldflags="-s -w" -o $BUILD/$TARGET/$FILENAME || exit 1
- pushd $BUILD/$TARGET
- sha256sum+=("$(shasum -a 256 $FILENAME || exit 1)")
- cd .. && tar czvf $TARGET.tar.gz $TARGET
- mv $TARGET.tar.gz $DIR/dist
- popd
-done
+os='linux'
+echo "... building v$version for $os/$arch"
+TARGET="oauth2_proxy-$version.$os-$arch.$goversion"
+GOOS=$os GOARCH=$arch CGO_ENABLED=0
+ go build -ldflags="-s -w" -o ./dist/oauth2_proxy || exit 1
checksum_file="sha256sum.txt"
cd $DIR/dists
diff --git a/oauthproxy.go b/oauthproxy.go
index 21e5dfc..df9101a 100644
--- a/oauthproxy.go
+++ b/oauthproxy.go
@@ -381,7 +381,9 @@ func (p *OAuthProxy) SignInPage(rw http.ResponseWriter, req *http.Request, code
if redirect_url == p.SignInPath {
redirect_url = "/"
}
-
+ if req.FormValue("rd") != "" {
+ redirect_url = req.FormValue("rd")
+ }
t := struct {
ProviderName string
SignInMessage string
Акнун шумо метавонед тасвирро созед ва онро ба GitLab мо тела диҳед. Оянда дар manifests/kube-dashboard-oauth2-proxy.yaml
истифодаи тасвири дилхоҳро нишон диҳед (онро бо тасвири худ иваз кунед):
image: docker.io/colemickens/oauth2_proxy:latest
Агар шумо феҳристи бо иҷозат басташуда дошта бошед, фаромӯш накунед, ки истифодаи сирри тасвирҳоро барои кашидан илова кунед:
imagePullSecrets:
- name: gitlab-registry
... ва худи сирри реестрро илова кунед:
---
apiVersion: v1
data:
.dockercfg: eyJyZWdpc3RyeS5jb21wYW55LmNvbSI6IHsKICJ1c2VybmFtZSI6ICJvYXV0aDIiLAogInBhc3N3b3JkIjogIlBBU1NXT1JEIiwKICJhdXRoIjogIkFVVEhfVE9LRU4iLAogImVtYWlsIjogIm1haWxAY29tcGFueS5jb20iCn0KfQoK
=
kind: Secret
metadata:
annotations:
name: gitlab-registry
namespace: kube-system
type: kubernetes.io/dockercfg
Хонандаи бодиққат мебинад, ки сатри дароз дар боло base64 аз конфигуратсия аст:
{"registry.company.com": {
"username": "oauth2",
"password": "PASSWORD",
"auth": "AUTH_TOKEN",
"email": "[email protected]"
}
}
Ин маълумоти корбар дар GitLab аст, рамзи Kubernetes тасвирро аз феҳрист мегирад.
Пас аз анҷоми ҳама чиз, шумо метавонед насби ҷории (дуруст кор намекунад) панели идоракуниро бо фармони:
$ ./ctl.sh -d
... ва ҳама чизро аз нав насб кунед:
$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e… --oauth2-secret 6b79168f… --dashboard-url dashboard.example.com
Вақти он расидааст, ки ба панели идоракунӣ равед ва тугмаи хеле қадимии воридшавиро пайдо кунед:
Пас аз пахш кардани он, GitLab ба мо салом медиҳад ва пешниҳод мекунад, ки ба саҳифаи муқаррарии худ ворид шавед (албатта, агар мо қаблан ба он ҷо ворид нашуда бошем):
Мо бо маълумоти GitLab ворид мешавем - ва ҳама чиз анҷом дода мешавад:
Дар бораи хусусиятҳои панели идоракунӣ
Агар шумо як таҳиягар бошед, ки қаблан бо Kubernetes кор накардааст ё бо ягон сабаб қаблан бо панели идоракунӣ дучор нашудаед, ман баъзе аз қобилиятҳои онро нишон медиҳам.
Аввалан, шумо мебинед, ки "ҳама чиз сабз аст":
Маълумоти муфассалтар барои pods низ дастрас аст, ба монанди тағирёбандаҳои муҳити зист, тасвири зеркашидашуда, далелҳои оғозёбӣ ва ҳолати онҳо:
Ҷойгиркунӣ дорои статусҳои намоён мебошанд:
...ва тафсилоти дигар:
... ва инчунин қобилияти васеъ кардани густариш вуҷуд дорад:
Натиҷаи ин амалиёт:
Дар байни дигар хусусиятҳои муфид, ки аллакай дар аввали мақола зикр шудаанд, дидани гузоришҳо мебошанд:
... ва функсия барои ворид шудан ба консоли контейнерии подтаи интихобшуда:
Масалан, шумо инчунин метавонед ба маҳдудиятҳо/дархостҳо дар гиреҳҳо нигаред:
Албатта, ин на ҳама имкониятҳои панел мебошанд, аммо ман умедворам, ки шумо фикри умумиро ба даст меоред.
Камбудиҳои ҳамгироӣ ва панели идоракунӣ
Дар интегратсияи тавсифшуда вуҷуд надорад назорати дастрасӣ. Бо он, ҳамаи корбароне, ки ба GitLab дастрасӣ доранд, ба панели идоракунӣ дастрасӣ пайдо мекунанд. Онҳо дастрасии якхела дар худи панели идоракуниро доранд, ки ба ҳуқуқҳои худи панели идоракунӣ мувофиқанд
Дар байни камбудиҳои назаррас дар худи панел, ман инҳоро қайд мекунам:
- ворид шудан ба консоли контейнери init ғайриимкон аст;
- таҳрир кардани Deployments ва StatefulSets ғайриимкон аст, гарчанде ки инро дар ClusterRole ислоҳ кардан мумкин аст;
- Мутобиқати панели идоракунӣ бо версияҳои охирини Kubernetes ва ояндаи лоиҳа саволҳоро ба вуҷуд меорад.
Масъалаи охирин сазовори диккати махсус аст.
Ҳолати панели идоракунӣ ва алтернативаҳо
Ҷадвали мутобиқати панел бо версияҳои Kubernetes, ки дар версияи охирини лоиҳа пешниҳод шудааст (
Бо вуҷуди ин, вуҷуд дорад (аллакай дар моҳи январ қабул карда шудааст)
Ниҳоят, алтернативаҳо ба панели идоракунӣ мавҷуданд. Дар байни онҳо:
-
K8Dash — интерфейси ҷавон (аввалин супоришҳо аз моҳи марти соли ҷорӣ рост меояд), ки аллакай хусусиятҳои хубро пешниҳод мекунад, ба монанди муаррифии визуалии ҳолати кунунии кластер ва идоракунии объектҳои он. Ҳамчун "интерфейси вақти воқеӣ" ҷойгир карда шудааст, зеро маълумоти намоишшударо ба таври худкор навсозӣ мекунад, бидуни талаб кардани навсозии саҳифа дар браузер. -
Консол OpenShift - веб-интерфейси Red Hat OpenShift, ки бо вуҷуди ин, дигар пешрафтҳои лоиҳаро ба кластери шумо меорад, ки барои ҳама мувофиқ нест. -
Кубернатор лоиҳаи ҷолибест, ки ҳамчун интерфейси сатҳи поёнӣ (назар ба панели идоракунӣ) бо қобилияти дидани ҳама объектҳои кластер сохта шудааст. Аммо, ба назар чунин мерасад, ки рушди он қатъ шудааст. -
Polaris - рӯзи дигарэълон кард Лоиҳае, ки вазифаҳои панелро (ҳолати кунунии кластерро нишон медиҳад, аммо объектҳои онро идора намекунад) ва автоматии "тасдиқ кардани таҷрибаҳои беҳтарин" (кластерро барои дурустии конфигуратсияҳои Ҷойгиркунии дар он иҷрошаванда тафтиш мекунад) муттаҳид мекунад.
Ба ҷои ба хулоса омадан
Панели дастгоҳ як воситаи стандартӣ барои кластерҳои Kubernetes, ки мо хидмат мекунем. Интегратсияи он бо GitLab инчунин як қисми насби пешфарзи мо гардид, зеро бисёре аз таҳиягарон аз қобилиятҳои онҳо бо ин панел ба ҳаяҷон меоянд.
Панели назоратии Kubernetes мунтазам алтернативаҳои ҷомеаи кушодаасос дорад (ва мо бо хушнудӣ онҳоро баррасӣ мекунем), аммо дар ин марҳила мо бо ин ҳалли худ мемонем.
PS
Инчунин дар блоги мо хонед:
- «
kubebox ва дигар снарядҳо барои Kubernetes »; - «
Беҳтарин амалияҳои CI/CD бо Kubernetes ва GitLab (баррасӣ ва гузориши видеоӣ) »; - «
Бо истифода аз dapp ва GitLab CI барномаҳоро дар Kubernetes созед ва ҷойгир кунед »; - «
GitLab CI барои ҳамгироии пайваста ва таҳвил дар истеҳсолот. Қисми 1: лӯлаи мо ".
Манбаъ: will.com