เจฎเฉเจ เจคเฉเจนเจพเจกเฉ เจงเจฟเจเจจ เจตเจฟเฉฑเจ Dex, dex-k8s-authenticator เจ เจคเฉ GitHub เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉเจฌเจฐเจจเฉเจเจธ เจเจฒเฉฑเจธเจเจฐ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจฌเจฃเจพเจเจฃ เจฒเจ เจเฉฑเจ เจเจฟเจเจเฉเจฐเจฟเจ เจฒ เจชเฉเจธเจผ เจเจฐเจฆเจพ เจนเจพเจเฅค
เจฐเฉเจธเฉ-เจญเจพเจธเจผเจพ เจฆเฉ เจเฉเจฌเจฐเจจเฉเจเจธ เจคเฉเจ เจธเจฅเจพเจจเจ เจฎเฉเจฎ เจเฉเจ เจเจจ
เจเจพเจฃ เจชเจเจพเจฃ
เจ เจธเฉเจ เจตเจฟเจเจพเจธ เจ เจคเฉ QA เจเฉเจฎ เจฒเจ เจเจคเฉเจธเจผเฉเจฒ เจตเจพเจคเจพเจตเจฐเจฃ เจฌเจฃเจพเจเจฃ เจฒเจ Kubernetes เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจเจธ เจฒเจ เจ เจธเฉเจ เจเจนเจจเจพเจ เจจเฉเฉฐ เจกเฉเจธเจผเจฌเฉเจฐเจก เจ เจคเฉ kubectl เจฆเฉเจตเจพเจ เจฒเจ เจเจฒเฉฑเจธเจเจฐ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจฆเฉเจฃเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจเฅค OpenShift เจฆเฉ เจเจฒเจ, เจตเจจเฉเจฒเจพ เจเฉเจฌเจฐเจจเฉเจเจธ เจเฉเจฒ เจฎเฉเจฒ เจชเฉเจฐเจฎเจพเจฃเจฟเจเจคเจพ เจจเจนเฉเจ เจนเฉ, เจเจธเจฒเจ เจ เจธเฉเจ เจเจธเจฆเฉ เจฒเจ เจฅเจฐเจก-เจชเจพเจฐเจเฉ เจเฉเจฒเจธ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจเฅค
เจเจธ เจธเฉฐเจฐเจเจจเจพ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจตเจฐเจคเจฆเฉ เจนเจพเจ:
dex-k8s-เจชเฉเจฐเจฎเจพเจฃเจโ โ kubectl เจธเฉฐเจฐเจเจจเจพ เจฌเจฃเจพเจเจฃ เจฒเจ เจตเฉเฉฑเจฌ เจเจชเจฒเฉเจเฉเจธเจผเจจDex - OpenID เจเจจเฉเจเจ เจชเฉเจฐเจฆเจพเจคเจพ- GitHub - เจฌเจธ เจเจธ เจฒเจ เจเจฟ เจ เจธเฉเจ เจเจชเจฃเฉ เจเฉฐเจชเจจเฉ เจตเจฟเฉฑเจ GitHub เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ
เจ
เจธเฉเจ Google OIDC เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเฉเจคเฉ, เจชเจฐ เจฌเจฆเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ เจ
เจธเฉเจ
เจเจธ เจฒเจ, เจธเจพเจกเฉ เจเฉเจฌเจฐเจจเฉเจเจธ เจชเฉเจฐเจฎเจพเจฃเจฟเจเจคเจพ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจตเจฟเจเจผเฉเจ เจฒ เจชเฉเจฐเจคเฉเจจเจฟเจงเจคเจพ เจตเจฟเฉฑเจ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเฉ:
เจ
เจงเจฟเจเจพเจฐเจค เจชเฉเจฐเจเจฟเจฐเจฟเจ
เจฅเฉเฉเจพ เจนเฉเจฐ เจตเฉเจฐเจตเฉ เจ เจคเฉ เจฌเจฟเฉฐเจฆเฉ เจฆเจฐ เจฌเจฟเฉฐเจฆเฉ:
- เจเจชเจญเฉเจเจคเจพ dex-k8s-authenticator เจตเจฟเฉฑเจ เจฒเจพเจเจเจจ เจเจฐเจฆเจพ เจนเฉ (
login.k8s.example.com
) - dex-k8s-authenticator เจฌเฉเจจเจคเฉ เจจเฉเฉฐ Dex เจจเฉเฉฐ เจ
เฉฑเจเฉ เจญเฉเจเจฆเจพ เจนเฉ (
dex.k8s.example.com
) - Dex GitHub เจฒเฉเจเจเจจ เจชเฉฐเจจเฉ 'เจคเฉ เจฐเฉเจกเจพเจเจฐเฉเจเจ เจเจฐเจฆเจพ เจนเฉ
- GitHub เจฒเฉเฉเฉเจเจฆเฉ เจชเฉเจฐเจฎเจพเจฃเจฟเจเจคเจพ เจเจพเจฃเจเจพเจฐเฉ เจคเจฟเจเจฐ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเจธเจจเฉเฉฐ Dex เจจเฉเฉฐ เจตเจพเจชเจธ เจเจฐเจฆเจพ เจนเฉ
- Dex เจชเฉเจฐเจพเจชเจค เจเจพเจฃเจเจพเจฐเฉ เจจเฉเฉฐ dex-k8s-authenticator เจจเฉเฉฐ เจญเฉเจเจฆเจพ เจนเฉ
- เจเจชเจญเฉเจเจคเจพ GitHub เจคเฉเจ เจเฉฑเจ OIDC เจเฉเจเจจ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเจพ เจนเฉ
- dex-k8s-authenticator kubeconfig เจตเจฟเฉฑเจ เจเฉเจเจจ เจเฉเฉเจฆเจพ เจนเฉ
- kubectl KubeAPIServer เจจเฉเฉฐ เจเฉเจเจจ เจชเจพเจธ เจเจฐเจฆเจพ เจนเฉ
- KubeAPIServer เจชเจพเจธ เจเฉเจคเฉ เจเฉเจเจจ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ kubectl เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจตเจพเจชเจธ เจเจฐเจฆเจพ เจนเฉ
- เจเจชเจญเฉเจเจคเจพ kubectl เจคเฉเจ เจชเจนเฉเฉฐเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเจพ เจนเฉ
เจคเจฟเจเจฐเฉ เจฆเฉเจเจ เจเจพเจฐเจตเจพเจเจเจ
เจฌเฉเจธเจผเฉฑเจ, เจธเจพเจกเฉ เจเฉเจฒ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเฉฑเจ เจเฉเจฌเจฐเจจเฉเจเจธ เจเจฒเฉฑเจธเจเจฐ เจธเจฅเจพเจชเจค เจนเฉ (k8s.example.com
), เจ
เจคเฉ เจเจน เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจธเจฅเจพเจชเจฟเจค HELM เจฆเฉ เจจเจพเจฒ เจตเฉ เจเจเจเจฆเจพ เจนเฉเฅค เจธเจพเจกเฉ เจเฉเจฒ GitHub (super-org) 'เจคเฉ เจเฉฑเจ เจธเฉฐเจธเจฅเจพ เจตเฉ เจนเฉเฅค
เจเฉเจเจฐ เจคเฉเจนเจพเจกเฉ เจเฉเจฒ HELM เจจเจนเฉเจ เจนเฉ, เจคเจพเจ เจเจธเจจเฉเฉฐ เจเฉฐเจธเจเจพเจฒ เจเจฐเฉ
เจชเจนเจฟเจฒเจพเจ เจธเจพเจจเฉเฉฐ GitHub เจธเฉเจ เจ เจช เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค
เจธเฉฐเจเจ เจจ เจธเฉเจเจฟเฉฐเจเจเจผ เจชเฉฐเจจเฉ 'เจคเฉ เจเจพเจ, (https://github.com/organizations/super-org/settings/applications
) เจ
เจคเฉ เจเฉฑเจ เจจเจตเฉเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจ (เจ
เจงเจฟเจเจพเจฐเจค OAuth เจเจช):
GitHub 'เจคเฉ เจเฉฑเจ เจจเจตเฉเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจฃเจพ
เจฒเฉเฉเฉเจเจฆเฉ URL เจฆเฉ เจจเจพเจฒ เจเฉเจคเจฐเจพเจ เจจเฉเฉฐ เจญเจฐเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ:
- เจนเฉเจฎเจชเฉเจ URL:
https://dex.k8s.example.com
- เจ
เจงเจฟเจเจพเจฐ เจเจพเจฒเจฌเฉเจ URL:
https://dex.k8s.example.com/callback
เจฒเจฟเฉฐเจเจพเจ เจฆเฉ เจจเจพเจฒ เจธเจพเจตเจงเจพเจจ เจฐเจนเฉ, เจธเจฒเฉเจธเจผเจพเจ เจจเฉเฉฐ เจเฉเจเจเจฃเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจจเจนเฉเจ เจนเฉเฅค
เจเฉฑเจ เจญเจฐเฉ เจนเฉเจ เจซเจพเจฐเจฎ เจฆเฉ เจเจตเจพเจฌ เจตเจฟเฉฑเจ, GitHub เจคเจฟเจเจฐ เจเจฐเฉเจเจพ Client ID
ะธ Client secret
, เจเจนเจจเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ
เจค เจฅเจพเจ เจคเฉ เจฐเฉฑเจเฉ, เจเจน เจธเจพเจกเฉ เจฒเจ เจฒเจพเจญเจฆเจพเจเจ เจนเฉเจฃเจเฉ (เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจ
เจธเฉเจ เจตเจฐเจคเจฆเฉ เจนเจพเจ
Client ID: 1ab2c3d4e5f6g7h8
Client secret: 98z76y54x32w1
เจธเจฌเจกเฉเจฎเฉเจจเจพเจ เจฒเจ DNS เจฐเจฟเจเจพเจฐเจก เจคเจฟเจเจฐ เจเจฐเฉ login.k8s.example.com
ะธ dex.k8s.example.com
, เจจเจพเจฒ เจนเฉ เจชเฉเจฐเจตเฉเจธเจผ เจฒเจ SSL เจธเจฐเจเฉเจซเจฟเจเฉเจเฅค
เจเจ SSL เจธเจฐเจเฉเจซเจฟเจเฉเจ เจฌเจฃเจพเจเจ:
cat <<EOF | kubectl create -f -
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: cert-auth-dex
namespace: kube-system
spec:
secretName: cert-auth-dex
dnsNames:
- dex.k8s.example.com
acme:
config:
- http01:
ingressClass: nginx
domains:
- dex.k8s.example.com
issuerRef:
name: le-clusterissuer
kind: ClusterIssuer
---
apiVersion: certmanager.k8s.io/v1alpha1
kind: Certificate
metadata:
name: cert-auth-login
namespace: kube-system
spec:
secretName: cert-auth-login
dnsNames:
- login.k8s.example.com
acme:
config:
- http01:
ingressClass: nginx
domains:
- login.k8s.example.com
issuerRef:
name: le-clusterissuer
kind: ClusterIssuer
EOF
kubectl describe certificates cert-auth-dex -n kube-system
kubectl describe certificates cert-auth-login -n kube-system
เจธเจฟเจฐเจฒเฉเจ เจฆเฉ เจจเจพเจฒ เจเจฒเฉฑเจธเจเจฐ เจเจพเจฐเฉเจเจฐเจคเจพ le-clusterissuer
เจชเจนเจฟเจฒเจพเจ เจนเฉ เจฎเฉเจเฉเจฆ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจชเจฐ เจเฉ เจจเจนเฉเจ, เจคเจพเจ เจเจธเจจเฉเฉฐ HELM เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจฌเจฃเจพเจ:
helm install --namespace kube-system -n cert-manager stable/cert-manager
cat << EOF | kubectl create -f -
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: le-clusterissuer
namespace: kube-system
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: le-clusterissuer
http01: {}
EOF
KubeAPIServer เจธเฉฐเจฐเจเจจเจพ
kubeAPIServer เจฆเฉ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ OIDC เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจ เจ เจคเฉ เจเจฒเฉฑเจธเจเจฐ เจจเฉเฉฐ เจ เฉฑเจชเจกเฉเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ:
kops edit cluster
...
kubeAPIServer:
anonymousAuth: false
authorizationMode: RBAC
oidcClientID: dex-k8s-authenticator
oidcGroupsClaim: groups
oidcIssuerURL: https://dex.k8s.example.com/
oidcUsernameClaim: email
kops update cluster --yes
kops rolling-update cluster --yes
เจ
เจธเฉเจ เจตเจฐเจคเจฆเฉ เจนเจพเจ
Dex เจธเฉฐเจฐเจเจจเจพ เจ เจคเฉ dex-k8s-เจชเฉเจฐเจฎเจพเจฃเจฟเจ
Dex เจฆเฉ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจกเฉ เจเฉเจฒ เจเฉเจฌเจฐเจจเฉเจเจธ เจฎเจพเจธเจเจฐ เจคเฉเจ เจเฉฑเจ เจธเจฐเจเฉเจซเจฟเจเฉเจ เจ เจคเฉ เจเฉฑเจ เจเฉเฉฐเจเฉ เจนเฉเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเฉ, เจเจ เจเจธเจจเฉเฉฐ เจเฉฑเจฅเฉเจ เจชเฉเจฐเจพเจชเจค เจเจฐเฉเจ:
sudo cat /srv/kubernetes/ca.{crt,key}
-----BEGIN CERTIFICATE-----
AAAAAAAAAAABBBBBBBBBBCCCCCC
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
DDDDDDDDDDDEEEEEEEEEEFFFFFF
-----END RSA PRIVATE KEY-----
เจเจ dex-k8s-authenticator เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจจเฉเฉฐ เจเจฒเฉเจจ เจเจฐเฉเจ:
git clone [email protected]:mintel/dex-k8s-authenticator.git
cd dex-k8s-authenticator/
เจฎเฉเฉฑเจฒ เจซเจพเจเจฒเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจ
เจธเฉเจ เจเจชเจฃเฉ เจฒเจ เจฒเจเจเจฆเจพเจฐ เจขเฉฐเจ เจจเจพเจฒ เจตเฉเจฐเฉเจเจฌเจฒ เจจเฉเฉฐ เจธเฉฐเจฐเจเจฟเจค เจเจฐ เจธเจเจฆเฉ เจนเจพเจ
เจเจ Dex เจฒเจ เจธเฉฐเจฐเจเจจเจพ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเฉเจ:
cat << EOF > values-dex.yml
global:
deployEnv: prod
tls:
certificate: |-
-----BEGIN CERTIFICATE-----
AAAAAAAAAAABBBBBBBBBBCCCCCC
-----END CERTIFICATE-----
key: |-
-----BEGIN RSA PRIVATE KEY-----
DDDDDDDDDDDEEEEEEEEEEFFFFFF
-----END RSA PRIVATE KEY-----
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
path: /
hosts:
- dex.k8s.example.com
tls:
- secretName: cert-auth-dex
hosts:
- dex.k8s.example.com
serviceAccount:
create: true
name: dex-auth-sa
config: |
issuer: https://dex.k8s.example.com/
storage: # https://github.com/dexidp/dex/issues/798
type: sqlite3
config:
file: /var/dex.db
web:
http: 0.0.0.0:5556
frontend:
theme: "coreos"
issuer: "Example Co"
issuerUrl: "https://example.com"
logoUrl: https://example.com/images/logo-250x25.png
expiry:
signingKeys: "6h"
idTokens: "24h"
logger:
level: debug
format: json
oauth2:
responseTypes: ["code", "token", "id_token"]
skipApprovalScreen: true
connectors:
- type: github
id: github
name: GitHub
config:
clientID: $GITHUB_CLIENT_ID
clientSecret: $GITHUB_CLIENT_SECRET
redirectURI: https://dex.k8s.example.com/callback
orgs:
- name: super-org
teams:
- team-red
staticClients:
- id: dex-k8s-authenticator
name: dex-k8s-authenticator
secret: generatedLongRandomPhrase
redirectURIs:
- https://login.k8s.example.com/callback/
envSecrets:
GITHUB_CLIENT_ID: "1ab2c3d4e5f6g7h8"
GITHUB_CLIENT_SECRET: "98z76y54x32w1"
EOF
เจ เจคเฉ dex-k8s-authenticator เจฒเจ:
cat << EOF > values-auth.yml
global:
deployEnv: prod
dexK8sAuthenticator:
clusters:
- name: k8s.example.com
short_description: "k8s cluster"
description: "Kubernetes cluster"
issuer: https://dex.k8s.example.com/
k8s_master_uri: https://api.k8s.example.com
client_id: dex-k8s-authenticator
client_secret: generatedLongRandomPhrase
redirect_uri: https://login.k8s.example.com/callback/
k8s_ca_pem: |
-----BEGIN CERTIFICATE-----
AAAAAAAAAAABBBBBBBBBBCCCCCC
-----END CERTIFICATE-----
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
path: /
hosts:
- login.k8s.example.com
tls:
- secretName: cert-auth-login
hosts:
- login.k8s.example.com
EOF
Dex เจ เจคเฉ dex-k8s-authenticator เจเฉฐเจธเจเจพเจฒ เจเจฐเฉ:
helm install -n dex --namespace kube-system --values values-dex.yml charts/dex
helm install -n dex-auth --namespace kube-system --values values-auth.yml charts/dex-k8s-authenticator
เจเจฒเฉ เจธเฉเจตเจพเจตเจพเจ เจฆเฉ เจเจพเจฐเจเจเฉเจธเจผเจฒเจคเจพ เจฆเฉ เจเจพเจเจ เจเจฐเฉเจ (Dex เจจเฉเฉฐ เจเฉเจก 400 เจตเจพเจชเจธ เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจ เจคเฉ dex-k8s-authenticator เจจเฉเฉฐ เจเฉเจก 200 เจตเจพเจชเจธ เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ):
curl -sI https://dex.k8s.example.com/callback | head -1
HTTP/2 400
curl -sI https://login.k8s.example.com/ | head -1
HTTP/2 200
RBAC เจธเฉฐเจฐเจเจจเจพ
เจ เจธเฉเจ เจเจฐเฉเฉฑเจช เจฒเจ เจเฉฑเจ เจเจฒเฉฑเจธเจเจฐเจฐเฉเจฒ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ, เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ เจธเจฟเจฐเจซเจผ-เจชเฉเฉเจนเจจ เจฒเจ เจชเจนเฉเฉฐเจ เจจเจพเจฒ:
cat << EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-read-all
rules:
-
apiGroups:
- ""
- apps
- autoscaling
- batch
- extensions
- policy
- rbac.authorization.k8s.io
- storage.k8s.io
resources:
- componentstatuses
- configmaps
- cronjobs
- daemonsets
- deployments
- events
- endpoints
- horizontalpodautoscalers
- ingress
- ingresses
- jobs
- limitranges
- namespaces
- nodes
- pods
- pods/log
- pods/exec
- persistentvolumes
- persistentvolumeclaims
- resourcequotas
- replicasets
- replicationcontrollers
- serviceaccounts
- services
- statefulsets
- storageclasses
- clusterroles
- roles
verbs:
- get
- watch
- list
- nonResourceURLs: ["*"]
verbs:
- get
- watch
- list
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create"]
EOF
เจเจ เจเจฒเฉฑเจธเจเจฐเจฐเฉเจฒ เจฌเจพเจเจกเจฟเฉฐเจ เจฒเจ เจเฉฑเจ เจธเฉฐเจฐเจเจจเจพ เจฌเจฃเจพเจเจ:
cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: dex-cluster-auth
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-read-all
subjects:
kind: Group
name: "super-org:team-red"
EOF
เจนเฉเจฃ เจ เจธเฉเจ เจเฉเจธเจเจฟเฉฐเจ เจฒเจ เจคเจฟเจเจฐ เจนเจพเจเฅค
เจเฉเจธเจ
เจฒเจพเจเจเจจ เจชเฉฐเจจเฉ 'เจคเฉ เจเจพเจ (https://login.k8s.example.com
) เจ
เจคเฉ เจเจชเจฃเฉ GitHub เจเจพเจคเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจฒเฉเจ เจเจจ เจเจฐเฉ:
เจฒเฉเจเจเจจ เจชเฉฐเจจเจพ
เจฒเฉเจเจเจจ เจชเฉฐเจจเจพ GitHub 'เจคเฉ เจฐเฉเจกเจพเจเจฐเฉเจเจ เจเฉเจคเจพ เจเจฟเจ
เจชเจนเฉเฉฐเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเฉเจเจ เจนเจฆเจพเจเจคเจพเจ เจฆเฉ เจชเจพเจฒเจฃเจพ เจเจฐเฉ
เจตเฉเฉฑเจฌ เจชเฉเจ เจคเฉเจ เจเจพเจชเฉ-เจชเฉเจธเจ เจเจฐเจจ เจคเฉเจ เจฌเจพเจ เจฆ, เจ เจธเฉเจ เจเจชเจฃเฉ เจเจฒเฉฑเจธเจเจฐ เจธเจฐเฉเจคเจพเจ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจเจฐเจจ เจฒเจ kubectl เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเจพเจ:
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
เจ
เจคเฉ เจเจน เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ, เจธเจพเจกเฉ เจธเฉฐเจธเจฅเจพ เจตเจฟเฉฑเจ เจธเจพเจฐเฉ GitHub เจเจชเจญเฉเจเจคเจพ เจธเจฐเฉเจคเจพเจ เจจเฉเฉฐ เจฆเฉเจ เจธเจเจฆเฉ เจนเจจ เจ
เจคเฉ เจชเฉเจก เจตเจฟเฉฑเจ เจฒเฉเจเจเจจ เจเจฐ เจธเจเจฆเฉ เจนเจจ, เจชเจฐ เจเจนเจจเจพเจ เจเฉเจฒ เจเจนเจจเจพเจ เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ เจ
เจงเจฟเจเจพเจฐ เจจเจนเฉเจ เจนเจจเฅค
เจธเจฐเฉเจค: www.habr.com