ingress可以很方便的把外部流量导入到内部的http服务里去。kubernetes只是提供了ingress的定义,但并未提供其实现,用户可以自己选择合适的ingress实现,例如nginx。

这里用的是nginx-ingress这个项目。

nginx-ingress官方部署文档

docker pull anjia0532/google-containers.defaultbackend:1.4
docker tag anjia0532/google-containers.defaultbackend:1.4 gcr.io/google_containers/defaultbackend:1.4
docker rmi anjia0532/google-containers.defaultbackend:1.4

docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0

quay.io的镜像很慢啊。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml


kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml

官方文档建议bear metal用NodePort方式暴漏服务,不过我做了一个修改,把nginx-ingress-controller改为了hostNetwork=true,这样我就可以直接用80/443访问x201了。

但不要删除 ingress-nginx 服务,否则controller会不停的报找不到。这应该是个bug,回头有空了我fix一下。

ingress好了得验证一下,正好前面部署的dashboard用了NodePort不太爽,改成用ingress吧!

由于dashboard加了https加密,所以配置起来稍微麻烦一点。

nginx对https的流量有三种做法,详细可以参考 tonybai 的这篇文章,非常详实。

ssl

下面是dashboard的ingress配置。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kube-system
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/secure-backends: "true"
    ingress.kubernetes.io/ssl-redirect: "False"
spec:
  tls:
  - hosts:
    - x201
    - "*.x201"
    secretName: kubernetes-dashboard-certs
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 443
    host: x201

这里用的是ssl termination方式,nginx.ingress.kubernetes.io/secure-backends: "true" 设置为true。

注意要重启一下ingress-controller,这应该也是个bug。

重启以后,就可以通过 https://x201 直接访问dashboard了。

是不是很方便?


ingress好了以后,可以做一些有意思的事,比如说example-app。

在dex这一章里,example-app每次开机都要命令行重新启动,比较麻烦,于是我做了一个镜像,可以部署到k8s上去,并且给它配置了一个ingress,这样就可以通过一个简单好记的域名直接访问了。

编排文件在这里

$ kubectl create secret generic dex.ca.pem --from-file ca.pem
$ kubectl apply -f example-app.yaml

本机上配置一下hosts文件,然后浏览器访问 example-app.ieevee.com 就可以了。

results matching ""

    No results matching ""