Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe

This commit is contained in:
Translator
2025-01-02 00:00:35 +00:00
parent 6f74ac1a76
commit 5a62f6b0a3
229 changed files with 2195 additions and 2217 deletions

View File

@@ -1,12 +1,12 @@
# Kubernetes Basics
# Msingi wa Kubernetes
## Kubernetes Basics
## Msingi wa Kubernetes
{{#include ../../banners/hacktricks-training.md}}
**Mwandishi wa awali wa ukurasa huu ni** [**Jorge**](https://www.linkedin.com/in/jorge-belmonte-a924b616b/) **(soma chapisho lake la awali** [**hapa**](https://sickrov.github.io)**)**
## Architecture & Basics
## Muktadha & Msingi
### Kubernetes inafanya nini?
@@ -15,49 +15,49 @@
- Inahakikisha kontena zinabaki hai.
- Inaruhusu mawasiliano ya kontena.
- Inaruhusu mbinu za kutekeleza.
- Inashughulikia kiasi cha habari.
- Inashughulikia kiasi cha taarifa.
### Architecture
### Muktadha
![](https://sickrov.github.io/media/Screenshot-68.jpg)
- **Node**: mfumo wa uendeshaji wenye pod au pods.
- **Pod**: Kifungashio kilichozunguka kontena au kontena nyingi. Pod inapaswa kuwa na programu moja tu (hivyo kawaida, pod inakimbia kontena 1 tu). Pod ndiyo njia ambayo kubernetes inafanya teknolojia ya kontena kuwa rahisi.
- **Service**: Kila pod ina **anwani ya IP** 1 ya ndani kutoka kwa anuwai ya ndani ya node. Hata hivyo, inaweza pia kufichuliwa kupitia huduma. **Huduma ina anwani ya IP** na lengo lake ni kudumisha mawasiliano kati ya pods ili ikiwa moja itakufa **mbadala mpya** (ikiwa na IP ya ndani tofauti) **itaweza kufikiwa** ikifichuliwa katika **IP ile ile ya huduma**. Inaweza kuundwa kama ya ndani au ya nje. Huduma pia inafanya kazi kama **mshiriki wa mzigo wakati pods 2 zimeunganishwa** na huduma ile ile.\
Wakati **huduma** inaundwa unaweza kupata viunganishi vya kila huduma inayokimbia `kubectl get endpoints`
- **Kubelet**: Wakala mkuu wa node. Kipengele kinachoweka mawasiliano kati ya node na kubectl, na inaweza kuendesha pods pekee (kupitia API server). Kubelet haiwezi kusimamia kontena ambazo hazikuundwa na Kubernetes.
- **Huduma**: Kila pod ina **anwani ya IP** 1 ya ndani kutoka kwa anuwai ya ndani ya node. Hata hivyo, inaweza pia kufichuliwa kupitia huduma. **Huduma pia ina anwani ya IP** na lengo lake ni kudumisha mawasiliano kati ya pods hivyo ikiwa moja itakufa **mbadala mpya** (ikiwa na IP ya ndani tofauti) **itaweza kufikiwa** ikifichuliwa katika **IP ile ile ya huduma**. Inaweza kuwekewa mipangilio kama ya ndani au ya nje. Huduma pia inafanya kazi kama **mshiriki wa mzigo wakati pods 2 zimeunganishwa** kwenye huduma ile ile.\
Wakati **huduma** inaundwa unaweza kupata viunganishi vya kila huduma kwa kukimbia `kubectl get endpoints`
- **Kubelet**: Wakala mkuu wa node. Kipengele kinachoweka mawasiliano kati ya node na kubectl, na kinaweza tu kukimbia pods (kupitia API server). Kubelet haiwezi kusimamia kontena ambazo hazikuundwa na Kubernetes.
- **Kube-proxy**: ni huduma inayosimamia mawasiliano (huduma) kati ya apiserver na node. Msingi ni IPtables kwa nodes. Watumiaji wenye uzoefu zaidi wanaweza kufunga kube-proxies nyingine kutoka kwa wauzaji wengine.
- **Sidecar container**: Kontena za sidecar ni kontena ambazo zinapaswa kukimbia pamoja na kontena kuu katika pod. Mwelekeo huu wa sidecar unapanua na kuboresha kazi za kontena za sasa bila kuzibadilisha. Siku hizi, tunajua kwamba tunatumia teknolojia ya kontena kufunga utegemezi wote ili programu ikimbie popote. Kontena inafanya kitu kimoja tu na inafanya hicho vizuri sana.
- **Mchakato wa Mwalimu:**
- **Api Server:** Ndiyo njia ambayo watumiaji na pods hutumia kuwasiliana na mchakato wa mwalimu. Maombi tu yaliyothibitishwa yanapaswa kuruhusiwa.
- **Scheduler**: Ratiba inahusisha kuhakikisha kuwa Pods zinapatana na Nodes ili Kubelet iweze kuzendesha. Ina akili ya kutosha kuamua ni node ipi ina rasilimali zaidi zinazopatikana na kupeana pod mpya kwake. Kumbuka kwamba ratiba haianzishi pods mpya, inawasiliana tu na mchakato wa Kubelet unaokimbia ndani ya node, ambayo itazindua pod mpya.
- **Kube Controller manager**: Inakagua rasilimali kama seti za replica au kutekeleza ili kuangalia ikiwa, kwa mfano, idadi sahihi ya pods au nodes inakimbia. Ikiwa pod inakosekana, itawasiliana na ratiba ili kuanzisha mpya. Inasimamia uzalishaji, tokeni, na huduma za akaunti kwa API.
- **etcd**: Hifadhi ya data, ya kudumu, thabiti, na iliyosambazwa. Ni hifadhidata ya Kubernetes na hifadhi ya funguo-thamani ambapo inahifadhi hali kamili ya makundi (kila mabadiliko yanarekodiwa hapa). Vipengele kama Scheduler au Kiongozi wa Msimamizi vinategemea tarehe hii kujua ni mabadiliko gani yamefanyika (rasilimali zinazopatikana za nodes, idadi ya pods zinazokimbia...)
- **Cloud controller manager**: Ni kiongozi maalum wa udhibiti wa mtiririko na programu, yaani: ikiwa una makundi katika AWS au OpenStack.
- **Sidecar container**: Sidecar containers ni kontena ambazo zinapaswa kukimbia pamoja na kontena kuu katika pod. Mwelekeo huu wa sidecar unapanua na kuboresha kazi za kontena za sasa bila kuzibadilisha. Siku hizi, tunajua kwamba tunatumia teknolojia ya kontena kufunga utegemezi wote ili programu ikimbie popote. Kontena inafanya kitu kimoja tu na inafanya hicho vizuri sana.
- **Mchakato mkuu:**
- **Api Server:** Ni njia ambayo watumiaji na pods hutumia kuwasiliana na mchakato mkuu. Maombi tu yaliyothibitishwa yanapaswa kuruhusiwa.
- **Ratiba**: Ratiba inahusisha kuhakikisha kuwa Pods zinapatana na Nodes ili Kubelet iweze kuzikimbia. Ina akili ya kutosha kuamua ni node ipi ina rasilimali zaidi zinazopatikana na kupeana pod mpya kwake. Kumbuka kwamba ratiba haianzishi pods mpya, inawasiliana tu na mchakato wa Kubelet unaokimbia ndani ya node, ambayo itazindua pod mpya.
- **Meneja wa Kube Controller**: Inakagua rasilimali kama seti za replica au kutekeleza ili kuangalia ikiwa, kwa mfano, idadi sahihi ya pods au nodes inakimbia. Ikiwa pod inakosekana, itawasiliana na ratiba kuanzisha mpya. Inasimamia uzalishaji, tokeni, na huduma za akaunti kwa API.
- **etcd**: Hifadhi ya data, ya kudumu, thabiti, na iliyosambazwa. Ni hifadhidata ya Kubernetes na hifadhi ya funguo-thamani ambapo inahifadhi hali kamili ya makundi (kila mabadiliko yanarekodiwa hapa). Vipengele kama Ratiba au Meneja wa Controller vinategemea tarehe hii kujua ni mabadiliko gani yamefanyika (rasilimali zinazopatikana za nodes, idadi ya pods zinazokimbia...)
- **Meneja wa Cloud controller**: Ni meneja maalum wa udhibiti wa mtiririko na programu, yaani: ikiwa una makundi katika AWS au OpenStack.
Kumbuka kwamba kama kuna nodes kadhaa (zinazoendesha pods kadhaa), pia kunaweza kuwa na michakato kadhaa ya mwalimu ambayo ufikiaji wao kwa Api server umepangwa na etcd zao zimeunganishwa.
Kumbuka kwamba kama kuna nodes kadhaa (zinazoendesha pods kadhaa), pia kuna mchakato kadhaa mkuu ambao ufikiaji wao kwa Api server umepangwa na etcd yao imeunganishwa.
**Volumes:**
**Vikundi:**
Wakati pod inaunda data ambayo haipaswi kupotea wakati pod inapokosekana inapaswa kuhifadhiwa katika kiasi halisi. **Kubernetes inaruhusu kuunganisha kiasi kwa pod ili kudumisha data**. Kiasi kinaweza kuwa katika mashine ya ndani au katika **hifadhi ya mbali**. Ikiwa unakimbia pods katika nodes tofauti za kimwili unapaswa kutumia hifadhi ya mbali ili pods zote ziweze kuipata.
Wakati pod inaunda data ambayo haipaswi kupotea wakati pod inatoweka inapaswa kuhifadhiwa katika kikundi cha kimwili. **Kubernetes inaruhusu kuunganisha kikundi kwa pod ili kudumisha data**. Kikundi kinaweza kuwa katika mashine ya ndani au katika **hifadhi ya mbali**. Ikiwa unakimbia pods katika nodes tofauti za kimwili unapaswa kutumia hifadhi ya mbali ili pods zote ziweze kuifikia.
**Mikakati mingine:**
**Mipangilio mingine:**
- **ConfigMap**: Unaweza kuunda **URLs** za kufikia huduma. Pod itapata data kutoka hapa kujua jinsi ya kuwasiliana na huduma zingine (pods). Kumbuka kwamba hii si mahali panapopendekezwa kuhifadhi hati za siri!
- **Secret**: Hapa ndipo **hifadhi ya data za siri** kama nywila, funguo za API... zimeandikwa kwa B64. Pod itakuwa na uwezo wa kufikia data hii kutumia hati zinazohitajika.
- **Deployments**: Hapa ndipo vipengele vinavyopaswa kuendeshwa na kubernetes vinapojulikana. Mtumiaji kawaida hatatumia moja kwa moja na pods, pods zimefichwa katika **ReplicaSets** (idadi ya pods sawa zilizorejelewa), ambazo zinaendeshwa kupitia kutekeleza. Kumbuka kwamba kutekeleza ni kwa ajili ya programu **zisizo na hali**. Mipangilio ya chini kabisa ya kutekeleza ni jina na picha ya kuendesha.
- **StatefulSet**: Kipengele hiki kimekusudiwa hasa kwa programu kama **databases** ambazo zinahitaji **kupata hifadhi ile ile**.
- **ConfigMap**: Unaweza kuunda **URLs** za kufikia huduma. Pod itapata data kutoka hapa ili kujua jinsi ya kuwasiliana na huduma zingine (pods). Kumbuka kwamba hii si mahali panapopendekezwa kuhifadhi hati za siri!
- **Siri**: Hapa ndiko **kuhifadhi data za siri** kama nywila, funguo za API... zilizokodishwa kwa B64. Pod itakuwa na uwezo wa kufikia data hii ili kutumia hati zinazohitajika.
- **Mikutano**: Hapa ndipo vipengele vinavyopaswa kuendeshwa na kubernetes vinapojulikana. Mtumiaji kwa kawaida hatatumia moja kwa moja na pods, pods zimefichwa katika **ReplicaSets** (idadi ya pods sawa zilizorejelewa), ambazo zinaendeshwa kupitia mikutano. Kumbuka kwamba mikutano ni kwa ajili ya programu **zisizo na hali**. Mipangilio ya chini kabisa ya mkutano ni jina na picha ya kukimbia.
- **StatefulSet**: Kipengele hiki kimekusudiwa hasa kwa programu kama **hifadhidata** ambazo zinahitaji **kufikia hifadhi ile ile**.
- **Ingress**: Hii ni mipangilio inayotumika **kufichua programu hadharani kwa URL**. Kumbuka kwamba hii inaweza pia kufanywa kwa kutumia huduma za nje, lakini hii ndiyo njia sahihi ya kufichua programu.
- Ikiwa unatekeleza Ingress utahitaji kuunda **Ingress Controllers**. Ingress Controller ni **pod** ambayo itakuwa kiunganishi kitakachopokea maombi na kuangalia na kupunguza mzigo kwa huduma. Ingress controller it **tuma ombi kulingana na sheria za ingress zilizowekwa**. Kumbuka kwamba sheria za ingress zinaweza kuelekeza kwenye njia tofauti au hata subdomains kwa huduma tofauti za ndani za kubernetes.
- Praktiki bora ya usalama ingekuwa kutumia mshiriki wa mzigo wa wingu au seva ya proxy kama kiingilio ili kusiwe na sehemu yoyote ya kundi la Kubernetes iliyofichuliwa.
- Wakati ombi ambalo halifai na sheria yoyote ya ingress linapokelewa, ingress controller italipeleka kwa "**Default backend**". Unaweza `describe` ingress controller ili kupata anwani ya kipengele hiki.
- Ikiwa unatekeleza Ingress utahitaji kuunda **Ingress Controllers**. Ingress Controller ni **pod** ambayo itakuwa kiunganishi kitakachopokea maombi na kuangalia na kupunguza mzigo kwa huduma. Ingress controller it **atapeleka ombi kulingana na sheria za ingress zilizowekwa**. Kumbuka kwamba sheria za ingress zinaweza kuelekeza kwenye njia tofauti au hata subdomains kwa huduma tofauti za ndani za kubernetes.
- Praktiki bora za usalama zingekuwa kutumia mshiriki wa mzigo wa wingu au seva ya proxy kama kiingilio ili kusiwe na sehemu yoyote ya kundi la Kubernetes iliyofichuliwa.
- Wakati ombi ambalo halifai sheria yoyote ya ingress linapokea, ingress controller italipeleka kwa "**Default backend**". Unaweza `describe` ingress controller ili kupata anwani ya kiparameta hiki.
- `minikube addons enable ingress`
### PKI infrastructure - Certificate Authority CA:
### Miundombinu ya PKI - Mamlaka ya Cheti CA:
![](https://sickrov.github.io/media/Screenshot-66.jpg)
- CA ndiyo mzizi unaotegemewa kwa vyeti vyote ndani ya kundi.
- CA ni mzizi unaotegemewa kwa vyeti vyote ndani ya kundi.
- Inaruhusu vipengele kuthibitisha kwa kila mmoja.
- Vyeti vyote vya kundi vinatiwa saini na CA.
- ETCd ina cheti chake mwenyewe.
@@ -66,11 +66,11 @@ Wakati pod inaunda data ambayo haipaswi kupotea wakati pod inapokosekana inapasw
- cheti cha kubelet.
- cheti cha ratiba.
## Basic Actions
## Vitendo vya Msingi
### Minikube
**Minikube** inaweza kutumika kufanya baadhi ya **majaribio ya haraka** kwenye kubernetes bila kuhitaji kupeleka mazingira yote ya kubernetes. Itakimbia **mchakato wa mwalimu na node katika mashine moja**. Minikube itatumia virtualbox kuendesha node. Tazama [**hapa jinsi ya kuisakinisha**](https://minikube.sigs.k8s.io/docs/start/).
**Minikube** inaweza kutumika kufanya baadhi ya **majaribio ya haraka** kwenye kubernetes bila kuhitaji kupeleka mazingira yote ya kubernetes. Itakimbia **mchakato mkuu na wa node katika mashine moja**. Minikube itatumia virtualbox kuendesha node. Tazama [**hapa jinsi ya kuisakinisha**](https://minikube.sigs.k8s.io/docs/start/).
```
$ minikube start
😄 minikube v1.19.0 on Ubuntu 20.04
@@ -153,12 +153,12 @@ minikube dashboard --url
🤔 Verifying proxy health ...
http://127.0.0.1:50034/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
```
### YAML configuration files examples
### Mifano ya faili za usanidi wa YAML
Kila faili la usanidi lina sehemu 3: **metadata**, **specification** (kitu kinachohitajika kuzinduliwa), **status** (hali inayotakiwa).\
Ndani ya specification ya faili la usanidi wa uanzishaji unaweza kupata kiolezo kilichofafanuliwa na muundo mpya wa usanidi unaofafanua picha ya kukimbia:
Kila faili la usanidi lina sehemu 3: **metadata**, **specification** (kitu kinachohitajika kuanzishwa), **status** (hali inayotakiwa).\
Ndani ya specification ya faili la usanidi wa uanzishaji unaweza kupata kiolezo kilichofafanuliwa na muundo mpya wa usanidi unaofafanua picha ya kuendesha:
**Example of Deployment + Service declared in the same configuration file (from** [**here**](https://gitlab.com/nanuchi/youtube-tutorial-series/-/blob/master/demo-kubernetes-components/mongo.yaml)**)**
**Mfano wa Uanzishaji + Huduma iliyotangazwa katika faili moja la usanidi (kutoka** [**hapa**](https://gitlab.com/nanuchi/youtube-tutorial-series/-/blob/master/demo-kubernetes-components/mongo.yaml)**)**
Kama huduma kwa kawaida inahusishwa na uanzishaji mmoja, inawezekana kutangaza zote mbili katika faili moja la usanidi (huduma iliyotangazwa katika usanidi huu inapatikana tu ndani):
```yaml
@@ -209,7 +209,7 @@ targetPort: 27017
```
**Mfano wa usanidi wa huduma ya nje**
Huduma hii itapatikana nje (angalia sifa za `nodePort` na `type: LoadBlancer`):
Huduma hii itapatikana kwa nje (angalia sifa za `nodePort` na `type: LoadBlancer`):
```yaml
---
apiVersion: v1
@@ -262,7 +262,7 @@ mongo-root-password: cGFzc3dvcmQ=
```
**Mfano wa ConfigMap**
A **ConfigMap** ni usanidi ambao unatolewa kwa pods ili wajue jinsi ya kutafuta na kufikia huduma nyingine. Katika kesi hii, kila pod itajua kwamba jina `mongodb-service` ni anwani ya pod ambayo wanaweza kuwasiliana nayo (hii pod itakuwa ikitekeleza mongodb):
A **ConfigMap** ni usanidi ambao unapeanwa kwa pods ili wajue jinsi ya kutafuta na kufikia huduma nyingine. Katika kesi hii, kila pod itajua kwamba jina `mongodb-service` ni anwani ya pod ambayo wanaweza kuwasiliana nayo (hii pod itakuwa ikitekeleza mongodb):
```yaml
apiVersion: v1
kind: ConfigMap
@@ -294,16 +294,16 @@ key: database_url
```
**Mfano wa usanidi wa volumu**
Unaweza kupata mifano tofauti ya faili za usanidi wa hifadhi ya yaml katika [https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes](https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes).\
You can find different example of storage configuration yaml files in [https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes](https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes).\
**Kumbuka kwamba volumu haziko ndani ya namespaces**
### Namespaces
Kubernetes inasaidia **vikundi vingi vya virtual** vinavyotegemea kundi moja la kimwili. Vikundi hivi vya virtual vinaitwa **namespaces**. Hizi zimetengwa kwa matumizi katika mazingira yenye watumiaji wengi waliotawanyika katika timu au miradi mbalimbali. Kwa vikundi vyenye watumiaji wachache hadi kumi, haupaswi kuhitaji kuunda au kufikiria kuhusu namespaces kabisa. Unapaswa kuanza kutumia namespaces ili kuwa na udhibiti na mpangilio bora wa kila sehemu ya programu iliyowekwa katika kubernetes.
Kubernetes supports **multiple virtual clusters** backed by the same physical cluster. These virtual clusters are called **namespaces**. These are intended for use in environments with many users spread across multiple teams, or projects. For clusters with a few to tens of users, you should not need to create or think about namespaces at all. You only should start using namespaces to have a better control and organization of each part of the application deployed in kubernetes.
Namespaces hutoa upeo wa majina. Majina ya rasilimali yanahitaji kuwa ya kipekee ndani ya namespace, lakini si katika namespaces tofauti. Namespaces haiwezi kuwekwa ndani ya nyingine na **kila** rasilimali ya **Kubernetes** inaweza kuwa **katika** **namespace** **moja** **tu**.
Namespaces provide a scope for names. Names of resources need to be unique within a namespace, but not across namespaces. Namespaces cannot be nested inside one another and **each** Kubernetes **resource** can only be **in** **one** **namespace**.
Kuna namespaces 4 kwa default ikiwa unatumia minikube:
There are 4 namespaces by default if you are using minikube:
```
kubectl get namespace
NAME STATUS AGE
@@ -312,20 +312,20 @@ kube-node-lease Active 1d
kube-public Active 1d
kube-system Active 1d
```
- **kube-system**: Haifai kwa matumizi ya watumiaji na haupaswi kuigusa. Ni kwa ajili ya mchakato wa master na kubectl.
- **kube-system**: Haikusudiwi kwa matumizi ya watumiaji na haupaswi kuguswa. Ni kwa ajili ya mchakato wa master na kubectl.
- **kube-public**: Taarifa inayopatikana hadharani. Inajumuisha configmap ambayo ina taarifa za klasta.
- **kube-node-lease**: Inaamua upatikanaji wa nodi.
- **kube-node-lease**: Inabaini upatikanaji wa node.
- **default**: Namespace ambayo mtumiaji atatumia kuunda rasilimali.
```bash
#Create namespace
kubectl create namespace my-namespace
```
> [!NOTE]
> Kumbuka kwamba rasilimali nyingi za Kubernetes (k.m. pods, services, replication controllers, na nyingine) ziko katika majina fulani. Hata hivyo, rasilimali nyingine kama rasilimali za namespace na rasilimali za kiwango cha chini, kama nodes na persistenVolumes haziko katika namespace. Ili kuona ni rasilimali zipi za Kubernetes ziko na haziko katika namespace:
> Kumbuka kwamba rasilimali nyingi za Kubernetes (k.m. pods, services, replication controllers, na nyinginezo) ziko katika majina fulani. Hata hivyo, rasilimali nyingine kama rasilimali za namespace na rasilimali za kiwango cha chini, kama nodes na persistenVolumes haziko katika namespace. Ili kuona ni rasilimali zipi za Kubernetes ziko na haziko katika namespace:
>
> ```bash
> kubectl api-resources --namespaced=true #Katika namespace
> kubectl api-resources --namespaced=false #Haziko katika namespace
> kubectl api-resources --namespaced=false #Hazi katika namespace
> ```
Unaweza kuhifadhi namespace kwa amri zote za kubectl zinazofuata katika muktadha huo.
@@ -334,17 +334,17 @@ kubectl config set-context --current --namespace=<insert-namespace-name-here>
```
### Helm
Helm ni **meneja wa kifurushi** kwa Kubernetes. Inaruhusu kufunga faili za YAML na kuzigawa katika hifadhi za umma na za kibinafsi. Kifurushi hizi zinaitwa **Helm Charts**.
Helm ni **meneja wa pakiti** kwa Kubernetes. Inaruhusu kufunga faili za YAML na kuzisambaza katika hifadhi za umma na za kibinafsi. Pakiti hizi zinaitwa **Helm Charts**.
```
helm search <keyword>
```
Helm pia ni injini ya kigezo inayoruhusu kuunda faili za usanidi zenye mabadiliko:
Helm pia ni injini ya templeti inayoruhusu kuunda faili za usanidi zenye mabadiliko:
## Siri za Kubernetes
**Siri** ni kitu ambacho **kina data nyeti** kama vile nenosiri, token au ufunguo. Taarifa kama hizo zinaweza kuwekwa katika maelezo ya Pod au katika picha. Watumiaji wanaweza kuunda Siri na mfumo pia huunda Siri. Jina la kitu cha Siri lazima iwe jina halali la **DNS subdomain**. Soma hapa [nyaraka rasmi](https://kubernetes.io/docs/concepts/configuration/secret/).
**Siri** ni kitu ambacho **kina data nyeti** kama vile nenosiri, token au ufunguo. Taarifa kama hizo zinaweza kuwekwa katika spesifikesheni ya Pod au katika picha. Watumiaji wanaweza kuunda Siri na mfumo pia huunda Siri. Jina la kitu cha Siri lazima liwe jina halali la **DNS subdomain**. Soma hapa [nyaraka rasmi](https://kubernetes.io/docs/concepts/configuration/secret/).
Siri zinaweza kuwa kama:
Siri zinaweza kuwa vitu kama:
- API, SSH Keys.
- OAuth tokens.
@@ -354,14 +354,14 @@ Siri zinaweza kuwa kama:
Kuna aina tofauti za siri katika Kubernetes
| Aina ya Builtin | Matumizi |
| Aina ya Builtin | Matumizi |
| ----------------------------------- | ------------------------------------------ |
| **Opaque** | **data isiyo na mpangilio iliyofafanuliwa na watumiaji (Default)** |
| **Opaque** | **data isiyo na mpangilio iliyofafanuliwa na mtumiaji (Default)** |
| kubernetes.io/service-account-token | token ya akaunti ya huduma |
| kubernetes.io/dockercfg | faili ya \~/.dockercfg iliyosimbwa |
| kubernetes.io/dockerconfigjson | faili ya \~/.docker/config.json iliyosimbwa |
| kubernetes.io/basic-auth | credentials kwa uthibitisho wa msingi |
| kubernetes.io/ssh-auth | credentials kwa uthibitisho wa SSH |
| kubernetes.io/basic-auth | credentials kwa uthibitishaji wa msingi |
| kubernetes.io/ssh-auth | credentials kwa uthibitishaji wa SSH |
| kubernetes.io/tls | data kwa mteja au seva ya TLS |
| bootstrap.kubernetes.io/token | data ya token ya bootstrap |
@@ -372,7 +372,7 @@ Kuna aina tofauti za siri katika Kubernetes
![](https://sickrov.github.io/media/Screenshot-164.jpg)
Faili ifuatayo ya usanidi inaelezea **siri** inayoitwa `mysecret` yenye jozi 2 za funguo-thamani `username: YWRtaW4=` na `password: MWYyZDFlMmU2N2Rm`. Pia inaelezea **pod** inayoitwa `secretpod` ambayo itakuwa na `username` na `password` zilizofafanuliwa katika `mysecret` zikiwa wazi katika **mabadiliko ya mazingira** `SECRET_USERNAME` \_\_ na \_\_ `SECRET_PASSWOR`. Pia itakuwa **imeweka** siri ya `username` ndani ya `mysecret` katika njia `/etc/foo/my-group/my-username` ikiwa na ruhusa `0640`.
Faili ya usanidi ifuatayo inafafanua **siri** inayoitwa `mysecret` yenye jozi 2 za funguo-thamani `username: YWRtaW4=` na `password: MWYyZDFlMmU2N2Rm`. Pia inafafanua **pod** inayoitwa `secretpod` ambayo itakuwa na `username` na `password` zilizofafanuliwa katika `mysecret` zikiwa wazi katika **mabadiliko ya mazingira** `SECRET_USERNAME` \_\_ na \_\_ `SECRET_PASSWOR`. Pia itakuwa **imeweka** siri ya `username` ndani ya `mysecret` katika njia `/etc/foo/my-group/my-username` ikiwa na ruhusa `0640`.
```yaml:secretpod.yaml
apiVersion: v1
kind: Secret
@@ -422,27 +422,27 @@ kubectl get pods #Wait until the pod secretpod is running
kubectl exec -it secretpod -- bash
env | grep SECRET && cat /etc/foo/my-group/my-username && echo
```
### Secrets in etcd <a href="#discover-secrets-in-etcd" id="discover-secrets-in-etcd"></a>
### Siri katika etcd <a href="#discover-secrets-in-etcd" id="discover-secrets-in-etcd"></a>
**etcd** ni duka la **key-value** linalofanya kazi kwa usahihi na linaweza kupatikana kwa urahisi, linalotumika kama duka la nyuma la Kubernetes kwa data zote za klasta. Hebu tuingie kwenye siri zilizohifadhiwa katika etcd:
**etcd** ni duka la **key-value** lenye uthibitisho na linalopatikana kwa urahisi linalotumika kama duka la nyuma la Kubernetes kwa data zote za klasta. Hebu tuingie kwenye siri zilizohifadhiwa katika etcd:
```bash
cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep etcd
```
Utapata vyeti, funguo na URL ambazo ziko katika FS. Mara utakapovipata, utaweza kuungana na etcd.
Utapata vyeti, funguo na URL ambazo ziko katika FS. Mara utakapoyapata, utaweza kuungana na etcd.
```bash
#ETCDCTL_API=3 etcdctl --cert <path to client.crt> --key <path to client.ket> --cacert <path to CA.cert> endpoint=[<ip:port>] health
ETCDCTL_API=3 etcdctl --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key --cacert /etc/kubernetes/pki/etcd/etcd/ca.cert endpoint=[127.0.0.1:1234] health
```
Mara tu unapoanzisha mawasiliano utaweza kupata siri:
Mara tu unapofanikiwa kuanzisha mawasiliano utaweza kupata siri:
```bash
#ETCDCTL_API=3 etcdctl --cert <path to client.crt> --key <path to client.ket> --cacert <path to CA.cert> endpoint=[<ip:port>] get <path/to/secret>
ETCDCTL_API=3 etcdctl --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key --cacert /etc/kubernetes/pki/etcd/etcd/ca.cert endpoint=[127.0.0.1:1234] get /registry/secrets/default/secret_02
```
**Kuongeza usimbuaji kwenye ETCD**
**Kuongeza usimbaji fiche kwa ETCD**
Kwa default, siri zote **zinahifadhiwa kwa maandiko** wazi ndani ya etcd isipokuwa uweke safu ya usimbuaji. Mfano ufuatao unategemea [https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/)
Kwa default, siri zote **zinahifadhiwa kwa maandiko** wazi ndani ya etcd isipokuwa uweke safu ya usimbaji fiche. Mfano ufuatao unategemea [https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/)
```yaml:encryption.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
@@ -463,13 +463,13 @@ containers:
- kube-apiserver
- --encriyption-provider-config=/etc/kubernetes/etcd/<configFile.yaml>
```
Scroll down in the volumeMounts:
Piga chini katika volumeMounts:
```yaml
- mountPath: /etc/kubernetes/etcd
name: etcd
readOnly: true
```
Scroll down in the volumeMounts to hostPath:
Piga hatua chini katika volumeMounts hadi hostPath:
```yaml
- hostPath:
path: /etc/kubernetes/etcd
@@ -492,8 +492,8 @@ kubectl create secret generic secret1 -n default --from-literal=mykey=mydata
ambapo `[...]` lazima iwe ni hoja za ziada za kuungana na seva ya etcd.
3. Thibitisha kwamba siri iliyohifadhiwa ina mwanzo wa `k8s:enc:aescbc:v1:` ambayo inaonyesha kuwa mtoa huduma wa `aescbc` ameandika data inayotokana.
4. Thibitisha kwamba siri imeandikwa kwa usahihi inapopatikana kupitia API:
3. Kuthibitisha kwamba siri iliyohifadhiwa ina mwanzo wa `k8s:enc:aescbc:v1:` ambayo inaonyesha kuwa mtoa huduma wa `aescbc` ameandika data inayotokana.
4. Kuthibitisha kwamba siri imeandikwa kwa usahihi inapopatikana kupitia API:
```
kubectl describe secret secret1 -n default
@@ -505,9 +505,9 @@ inapaswa kulingana na `mykey: bXlkYXRh`, mydata imeandikwa, angalia [kuandika si
```
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
```
**Vidokezo vya mwisho:**
**Vidokezo vya Mwisho:**
- Jaribu kutoweka siri katika FS, zipate kutoka sehemu nyingine.
- Jaribu kutoweka siri katika FS, zipate kutoka maeneo mengine.
- Angalia [https://www.vaultproject.io/](https://www.vaultproject.io) kuongeza ulinzi zaidi kwa siri zako.
- [https://kubernetes.io/docs/concepts/configuration/secret/#risks](https://kubernetes.io/docs/concepts/configuration/secret/#risks)
- [https://docs.cyberark.com/Product-Doc/OnlineHelp/AAM-DAP/11.2/en/Content/Integrations/Kubernetes_deployApplicationsConjur-k8s-Secrets.htm](https://docs.cyberark.com/Product-Doc/OnlineHelp/AAM-DAP/11.2/en/Content/Integrations/Kubernetes_deployApplicationsConjur-k8s-Secrets.htm)