ITPub博客

首页 > 应用开发 > Go语言 > 【Kubernetes】kubectl create/expose对deployment名字校验前后不一致问题

【Kubernetes】kubectl create/expose对deployment名字校验前后不一致问题

Go语言 作者:whisperrr 时间:2021-09-03 16:42:40 0 删除 编辑

  # 创建一个名称为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 大连妇科医院哪个好  http://www.83692222.cn/

  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君已经拿着购买的高铁票,在高铁上坐着,准备出发旅游了。那问题就来了,理论上在老赖购票的时候,就应该对其身份进行验证,然后禁止其购票。这才是合理的校验逻辑!


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70005147/viewspace-2790338/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-08-11

  • 博文量
    24
  • 访问量
    13087