记录在采用 ingress-nginx 暴露内部服务的过程 安装ingress-nginx 是 ingress 的一个实现,目前它已经被放在 在我安装 ingress-nginx 的时候,其最新的版本是 kubectl apply -f \ https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.16.2/deploy/mandatory.yaml 这一步里面做了如下的事情:
创建 service 暴露到集群外部这也是一个神奇的操作,虽说 ingress 才是真正将服务暴露到外面的资源,但是实际上反而是一个 要么采用
要么采用 apiVersion: v1kind: Servicemetadata: name: ingress-nginx namespace: ingress-nginxspec: externalIPs: - <external-ips> ports: - name: http port: 80 targetPort: 80 protocol: TCP - name: https port: 443 targetPort: 443 protocol: TCP selector: app: ingress-nginx 这里我采用的是第二种,这样暴露出来的服务更干净。 然后测试一下看看是否工作:
如果返回 404 说明已经链接到了默认的 backend 了。 暴露服务到外部然后我们再创建一个 apiVersion: extensions/v1beta1kind: Ingressmetadata: name: openbayes-server-ing annotations: nginx.ingress.kubernetes.io/ssl-redirect: 'false'spec: rules: - http: paths: - path: /api backend: serviceName: openbayes-server-svc servicePort: 80
然后再尝试一下 采用 annotation 对特定服务做配置默认的 nginx 配置未必适合我们的服务,访问 Nginx Configuration 可以看到 ingress-nginx 所提供的三种 nginx 配置方式。其中 ConfigMaps 可以实现对 nginx 默认配置的修改;而 ingress annotation 则可以实现对特定 ingress 进行配置。 比如我们的 apiVersion: extensions/v1beta1kind: Ingressmetadata: name: openbayes-server-ing annotations: nginx.ingress.kubernetes.io/proxy-body-size: '1024m' nginx.ingress.kubernetes.io/ssl-redirect: 'false'spec: rules: - http: paths: - path: /api backend: serviceName: openbayes-server-svc servicePort: 80 每次修改 ingress 后,nginx-ingress-controller 会默认更新 nginx.conf,立即生效。 |
|