先上命令記錄:
# 創建一個名稱為nginx-1.16的deployment,沒有任何報錯,沒有觸發校驗規則
$ kubectl create deployment nginx-1.16 --replicas=3 --image=nginx:1.16 -n load-balance
deployment.apps/nginx-1.16 created# 接著創建Service,可以發現在為這個nginx-1.16的deployment創建service的時候,被正則校驗出nginx-1.16因含有小數點而創建失敗
$ kubectl expose deployment nginx-1.16 --port=80 --target-port=8080 --type=NodePort -n load-balance
The Service "nginx-1.16" is invalid: metadata.name: Invalid value: "nginx-1.16": a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')# 換個deployment的名字,提示找不到(很顯然找不到!)
$ kubectl expose deployment nginx-116 --port=80 --target-port=8080 --type=NodePort -n load-balance
Error from server (NotFound): deployments.apps "nginx-116" not found# 主動設定一個服務名之后,服務啟動就成功了,說明如果不指定--name服務名,那會把deployment的名字作為服務名
$ kubectl expose deployment nginx-1.16 --name=nginx116 --port=80 --target-port=8080 --type=NodePort -n load-balance
service/nginx116 exposed# kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean", BuildDate:"2021-07-15T21:04:39Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean", BuildDate:"2021-07-15T20:59:07Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
這個校驗邏輯就很詭異了,既然nginx-1.16這個含有小數點的deployment不能創建服務(程式設計時,要么隨機生成一個服務名,第二種是用deploy的名字作為服務名),現在很明顯是用了deployment的名字作為服務名了,所以,在執行 kubectl create deployment 和 kubectl expose deployment 的時候,應該在create、expose時,對deployment的名字做統一的校驗,
舉個不恰當的栗子,比如:A君是失信老賴,按照法律規定,A君是不準乘坐飛機、高鐵,但是,某一天當警察在高鐵上發現A君已經拿著購買的高鐵票,在高鐵上坐著,準備出發旅游了,那問題就來了,理論上在老賴購票的時候,就應該對其身份進行驗證,然后禁止其購票,這才是合理的校驗邏輯!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/293142.html
標籤:其他
上一篇:Nginx簡單配置負載均衡
