kubernetes雲原生紀元:徹底理解(k 8 s)Namespace
15281 ワード
kubernetes雲原生紀元:徹底理解(k 8 s)Namespace
文書ディレクトリ
さぎょう
Namespace(ネームスペース)コア機能の分離
default
デフォルトネーミングスペースの作成を開始します.サービス、Deploymet、Podがネーミングスペースを指定しない場合、このデフォルトのdefault
ネーミングスペースに配置されます.以下を確認します.
[root@master-001 ~]# kubectl get namespaces
NAME STATUS AGE
default Active 13d
ingress-nginx Active 13d
kube-node-lease Active 13d
kube-public Active 13d
kube-system Active 13d
デフォルトのネーミングスペースのpodを表示します.
[root@master-001 ~]# kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
rntibp-deployment-84d77f8f78-f99pp 0/1 CrashLoopBackOff 22 12d
tomcat-demo-5f4b587679-7mpz9 1/1 Running 3 12d
独自のNamespaceを作成
namespaceもymlファイルで作成できます
まずnamespace-dev.yamlファイルを書きます.
apiVersion: v1
kind: Namespace
metadata:
name: dev
プライマリノードで作成するには、次の手順に従います.
[root@master-001 ~]# kubectl apply -f kubenetes-dev.yaml
namespace/dev created
[root@master-001 ~]# kubectl get namespaces
NAME STATUS AGE
default Active 13d
dev Active 13s
ingress-nginx Active 13d
kube-node-lease Active 13d
kube-public Active 13d
kube-system Active 13d
Namespaceの使用
作成したnamepaseを使用すると、yamlのみが
metadata:
でnamespace: {namepsce }
増加します.Web-demoでは、サービス、Deploymet、Ingressの各構成情報にnamespace構成が追加されていることを示します.
Web.demo.yaml:
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
namespace: dev
spec:
selector:
matchLabels:
app: web-demo
replicas: 1
template:
metadata:
labels:
app: web-demo
spec:
containers:
- name: web-demo
image: hub.zhang.com/kubernetes/demo:2020011512381579063123
ports:
- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
name: web-demo
namespace: dev
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: web-demo
type: ClusterIP
---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-demo
namespace: dev
spec:
rules:
- host: web.demo.com
http:
paths:
- path: /
backend:
serviceName: web-demo
servicePort: 80
Web-demoアプリケーションの作成:
[root@master-001 ~]# kubectl apply -f web-demo.yaml
deployment.apps/web-demo created
service/web-demo created
ingress.extensions/web-demo created
表示:
[root@master-001 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
rntibp-deployment-84d77f8f78-f99pp 0/1 CrashLoopBackOff 35 12d
tomcat-demo-5f4b587679-7mpz9 1/1 Running 4 12d
名前空間の表示を指定するには、
-n {namespace }
を追加し、devの下のすべての情報を表示する必要があります.[root@master-001 ~]# kubectl get all -n dev
NAME READY STATUS RESTARTS AGE
pod/web-demo-58cd855cb7-gj5m4 1/1 Running 0 17m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/web-demo ClusterIP 10.105.152.212 <none> 80/TCP 17m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/web-demo 1/1 1 1 17m
NAME DESIRED CURRENT READY AGE
replicaset.apps/web-demo-58cd855cb7 1 1 1 17m
デフォルトの表示ではdefaultネーミングスペースの下にしか見えないものは
-n
に追加しなければ指定したネーミングスペースの下にあるものを表示できません隔離性のテスト
同じネーミングスペースでpod同士がアクセスできるのは共通です
tomcat-demo defult, web-demo dev
しかし、ネーミングスペースにまたがるのは望ましくない.
``DNS
はだめです[root@master-001 ~]# kubectl exec -it web-demo-58cd855cb7-gj5m4 -n dev bash
bash-4.4# ping tomcat-demo-5f4b587679-7mpz9
^C##
bash-4.4# cat /etc/resolv.conf
nameserver 10.96.0.10
search dev.svc.cluster.local svc.cluster.local cluster.local localdomain
options ndots:5
しかし、異なるネーミングスペースのサービスIPは相互にアクセスできます.
Web-demoを使用するpod ping tomcat-demoのサービスIPは通じており、サービスIPはネーミングスペースとは関係ありません.
[root@master-001 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d
rntibp-service ClusterIP 10.109.60.4 <none> 9902/TCP 12d
tomcat-demo ClusterIP 10.111.185.214 <none> 80/TCP 12d
[root@master-001 ~]# kubectl exec -it web-demo-58cd855cb7-gj5m4 -n dev bash
bash-4.4# ping 10.111.185.214
PING 10.111.185.214 (10.111.185.214): 56 data bytes #
64 bytes from 10.111.185.214: seq=0 ttl=64 time=0.073 ms
64 bytes from 10.111.185.214: seq=1 ttl=64 time=0.203 ms
名前空間にまたがるPod IPにもアクセスできます.
[root@master-001 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-demo-5f4b587679-7mpz9 1/1 Running 4 12d 192.168.93.101 node-001 <none> <none>
[root@master-001 ~]# kubectl exec -it web-demo-58cd855cb7-gj5m4 -n dev bash
bash-4.4# wget 192.168.93.101:8080
Connecting to 192.168.93.101:8080 (192.168.93.101:8080)
index.html 100% |*****************************************************| 11230 0:00:00 ETA
まとめ:
namesapaceは名前の隔離であり、物理的な隔離ではなく、開発者により多くの空間を与えるように設計されています.
デフォルトの名前空間アクセスの指定
デフォルトで名前空間へのアクセスを指定する場合はコンテキストを指定します.
本当の権限は、固定されたnamespaceにアクセスするには、最初からユーザーを設定する必要があります.
デフォルトで表示されているdefaultをdevに変更
/root/.kube/config
コンテキスト名set-context ctx-dev指定ユーザー-user=kubernetes-admin名前を変更==namespace=dev==[root@master-001 ~]# cp .kube/config .kube/config.backup #
[root@master-001 ~]# kubectl config set-context ctx-dev \
--cluster=kubernetes \
--user=kubernetes-admin \
--namespace=dev \
--kubeconfig=/root/.kube/config
[root@master-001 ~]# kubectl config use-context ctx-dev --kubeconfig=/root/.kube/config
[root@master-001 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-demo-58cd855cb7-gj5m4 1/1 Running 0 81m
[root@master-001 ~]# kubectl get pods -n defult
No resources found in defult namespace.
devの下しか見えず
-n
パラメータで指定してもだめです.