k8s’s ingress experiment

本文介绍了ingress 实践。

官方文档:点此

1 创建3个service,实际应用中不止这三个。
创建ingress

1
kubectl create ns ingress-nginx

创建后端服务1,并暴露出端口

1
2
3
kubectl run echoheaders --image=gcr.io/google_containers/echoserver:1.4 --replicas=1 --port=8080 -n ingress-nginx
kubectl expose deployment echoheaders --port=80 --target-port=8080 --name=echoheaders-x -n ingress-nginx
kubectl expose deployment echoheaders --port=80 --target-port=8080 --name=echoheaders-y -n ingress-nginx

创建后端服务2:tomcat service

1
2
kubectl run tomcat --image=tomcat --replicas=1 --port=8080 -n ingress-nginx
kubectl expose deployment tomcat --port=80 --target-port=8080 --name=tomcat-x -n ingress-nginx

创建后端服务2:nginx service

1
2
kubectl run nginx --image=nginx --replicas=1 --port=80 -n ingress-nginx
kubectl expose deployment nginx  --port=80 --target-port=80 --name=nginx-x -n ingress-nginx

2 创建ingress rule
ingress rule 可以有多个,创建后,不需要重启nginx-controller。
controller怎么识别到ingress rule? 自动识别到同一个ns下的ingress。
自动识别我们依次创建2个rule

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /index
        backend:
          serviceName: tomcat-x
          servicePort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /docs
        backend:
          serviceName: tomcat-x
          servicePort: 80

3 创建 nginx-controller:

参考链接

注:在没有按照“Mandatory commands” 操作的情形下,我手工在 with-rbac.yaml 中添加了hostNetwork: true。 这样nginx在一台node节点上启动,并对外提供服务。有单点的隐患,所以,“Mandatory commands” 的作用及执行还需要再执行下。

4 效果

访问 http://192.168.122.162/docs — > 跳转 https://192.168.122.162/docs (因为官方的tomcat 8080 跳转 8443 )

访问 http://192.168.122.162/index — > 跳转 https://192.168.122.162/index

访问 http://192.168.122.23/asdasd 使用echoheaders-x 服务。 此为 controller 默认的 backend 服务。是启动controller时的一个参数。