最近刚换了坑,需要将公司的Swarm集群迁移到阿里云的Kubernetes集群上来,在使用自带的Ingress控制器的过程中发现一个小Bug,具体过程见下文。

Kubernets Ingress 默认是不支持直接写多域名,相关issue,需要通过annotations的方式来实现。

官方给出的文档需要添加注解:

nginx.ingress.kubernetes.io/server-alias: "<alias 1>,<alias 2>"

于是按照官方的文档加上注解:

1
➜  cat test.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: xnile
  annotations:
    nginx.ingress.kubernetes.io/server-alias: "blog.dianduidian.com,www.dianduidian.com"
spec:
  rules:
  - host: dianduidian.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-nginx
          servicePort: 80

原以为这就好了呢,没想到竟然没有生效。

习惯性的查看log,结果傻眼了

image-20191214133428575

怎么把,逗号直接给我原样加上了,不应该是空格吗。

于是我又在我本地的Kubernetes集群上测试了一下发现并没有这个问题。

当然通过这些还不能确定就是阿里云的锅,因为阿里云Kubernetes集群默认给装的ingress 控制器版本比较旧,是否这个问题也存在于官方的之前版本还有待确认,等有时间再测试一下。不过既然你在自己的官方文档注明

Ingress的注解请参见https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

那是不是和官方保持一致呢。

nginx-ingress-controller版本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
➜  ingress kubectl -n kube-system logs -f nginx-ingress-controller-565ffc77f4-q9nzk
-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:    0.22.0.5
  Build:      552e0dbe1641084c61c5b02ebd14d896ce40c66d
  Repository: http://gitlab-sc.alibaba-inc.com/cos/ingress-nginx.git
-------------------------------------------------------------------------------

W1205 16:19:48.198100       6 flags.go:220] SSL certificate chain completion is disabled (--enable-ssl-chain-completion=false)
nginx version: nginx/1.15.8
built by gcc 8.3.0 (Debian 8.3.0-2)
built with OpenSSL 1.1.1b  26 Feb 2019
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --modules-path=/etc/nginx/modules --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_sub_module --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-http_secure_link_module --with-http_gunzip_module --with-file-aio --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --without-http_uwsgi_module --without-http_scgi_module --with-cc-opt='-g -Og -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wno-deprecated-declarations -fno-strict-aliasing -D_FORTIFY_SOURCE=2 --param=ssp-buffer-size=4 -DTCP_FASTOPEN=23 -fPIC -I/root/.hunter/_Base/2c5c6fc/ee3af38/92161a9/Install/include -Wno-cast-function-type -m64 -mtune=native' --with-ld-opt='-fPIE -fPIC -pie -Wl,-z,relro -Wl,-z,now -L/root/.hunter/_Base/2c5c6fc/ee3af38/92161a9/Install/lib' --user=www-data --group=www-data --add-module=/tmp/build/ngx_devel_kit-0.3.1rc1 --add-module=/tmp/build/set-misc-nginx-module-0.32 --add-module=/tmp/build/headers-more-nginx-module-0.33 --add-module=/tmp/build/nginx-http-auth-digest-274490cec649e7300fea97fed13d84e596bbc0ce --add-module=/tmp/build/ngx_http_substitutions_filter_module-bc58cb11844bc42735bbaef7085ea86ace46d05b --add-module=/tmp/build/lua-nginx-module-1c72f57ce87d4355d546a97c2bd8f5123a70db5c --add-module=/tmp/build/stream-lua-nginx-module-0.0.6rc2 --add-module=/tmp/build/lua-upstream-nginx-module-0.07 --add-module=/tmp/build/nginx-influxdb-module-0e2cb6cbf850a29c81e44be9e33d9a15d45c50e8 --add-dynamic-module=/tmp/build/nginx-opentracing-ea9994d7135be5ad2e3009d0f270e063b1fb3b21/opentracing --add-dynamic-module=/tmp/build/ModSecurity-nginx-fc061a57a8b0abda79b17cbe103d78db803fa575 --add-dynamic-module=/tmp/build/ngx_http_geoip2_module-3.2 --add-module=/tmp/build/nginx_ajp_module-bf6cd93f2098b59260de8d494f0f4b1f11a84627 --add-module=/tmp/build/ngx_brotli

更新

2021.3.25 测试0.30.0.1版已经不存在这个问题了

1
2
3
4
5
6
-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:       0.30.0.1
  Build:         f1f13f050209330a5c7cad885b796eb01d12b298
  Repository:    ingress-nginx
  nginx version: nginx/1.17.8

参考

https://github.com/kubernetes/kubernetes/issues/43633

https://www.alibabacloud.com/help/zh/doc-detail/86535.htm

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#server-alias