Ingress:
1)创建一个web服务,用deployment资源, 用httpd镜像,然后创建一个service资源与之关联。

[root@master ingress]# vim deploy_1.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: bdqn-ns
  labels:
    name: bdqn-ns

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpd-de 
  namespace: bdqn-ns
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: bdqn-ns
    spec:
      containers:
      - name: httpd
        image: httpd

---
apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
  namespace: bdqn-ns
spec:
  type: NodePort
  selector:
    app: bdqn-ns
  ports:
  - name: http-port
    port: 80
    targetPort: 80
    nodePort: 31033
[root@master ingress]# kubectl apply -f deploy_1.yaml

查看一下:

[root@master ingress]# kubectl get svc -n bdqn-ns 
NAME        TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
httpd-svc   NodePort   10.111.146.139   <none>        80:31033/TCP   23m
[root@master ingress]# kubectl get pod -n bdqn-ns
NAME                           READY   STATUS    RESTARTS   AGE
httpd-deploy-966699d76-8j54b   1/1     Running   0          23m
httpd-deploy-966699d76-kqb5k   1/1     Running   0          23m
[root@master ingress]# kubectl get ns
NAME              STATUS   AGE
bdqn-ns           Active   27m

浏览器访问:http://192.168.2.10:31033/

修改服务ingress配置 ingress配置详解_tomcat

2)创建一个web服务,用deployment资源,用tomcat镜像,然后创建一个service资源与之关联。
镜像用: tomcat:8.5.45

[root@master ingress]# vim deploy_2.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat-deploy
  namespace: bdqn-ns
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: bdqn-tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5.45

---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
  namespace: bdqn-ns
spec:
  type: NodePort
  selector:
    app: bdqn-tomcat
  ports:
  - name: tomcat-port
    port: 8080
    targetPort: 8080
    nodePort: 32033
[root@master ingress]# kubectl apply -f deploy_2.yaml

查看一下:

[root@master ingress]# kubectl get svc -n bdqn-ns 
NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
httpd-svc    NodePort   10.111.146.139   <none>        80:31033/TCP     36m
tomcat-svc   NodePort   10.102.30.132    <none>        8080:32033/TCP   88s
[root@master ingress]# kubectl get pod -n bdqn-ns
NAME                            READY   STATUS    RESTARTS   AGE
httpd-deploy-966699d76-8j54b    1/1     Running   0          37m
httpd-deploy-966699d76-kqb5k    1/1     Running   0          37m
tomcat-deploy-d4996b787-tkcf9   1/1     Running   0          112s
tomcat-deploy-d4996b787-x9grr   1/1     Running   0          112s

浏览器访问:http://192.168.2.10:32033/

修改服务ingress配置 ingress配置详解_tomcat_02

在k8s集群前边部署一个反向代理服务器,这个服务器代理k8s集群内部的service资源
Ingress:
Ingress controller: 将新加入的Ingress转化为反向代理服务器的配置文件,并使之生效。(动态的感知k8s集群内Ingress资源的变话)
Ingress: 将反向代理服务器的配置抽象成一个Ingress对象,每添加一个新的服务,只需要写一个新的Ingress的yaml文件即可。
HA-proxy,Nginx.

Nginx:反向代理服务器。
需要解决的两个问题:
1.动态的配置服务。
2.减少不必要的端口暴露
基于nginx的ingress controller根据不同的开发公司,又分为两种:
1.k8s社区版:Ingress-nginx.
2.nginx公司自己开发的:nginx-ingress.

k8s社区版:Ingress-nginx

修改服务ingress配置 ingress配置详解_修改服务ingress配置_03

修改服务ingress配置 ingress配置详解_修改服务ingress配置_04

修改服务ingress配置 ingress配置详解_修改服务ingress配置_05

修改服务ingress配置 ingress配置详解_nginx_06

[root@master ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.29.0/deploy/static/mandatory.yaml
[root@master ingress]# vim mandatory.yaml		//213行添加
spec:		//下面添加
hostNetwork: true

hostNetwork: true
在deployment资源中,如果添加了此字段,意味着Pod中运行的应用可以直接使用node节点的端口,这样node节点主机所在网络的其他主机,就可以通过访问该端口访问此应用。(类似于docker映射到宿主机的端口。)

[root@master ingress]# docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.29.0
[root@master ingress]# kubectl apply -f mandatory.yaml

查看一下:

[root@master ingress]# kubectl get pod -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-5954d475b6-72kz5   1/1     Running   0          14s

创建svc:

[root@master ingress]# vim mandatory-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 443
  selector:
    app: ingress-nginx
[root@master ingress]# kubectl apply -f mandatory-svc.yaml

简单的理解:原先暴露的service,现在给定一个统一的访问入口。

[root@master ingress]# kubectl get pod -n ingress-nginx 
NAME                                        READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-5954d475b6-72kz5   1/1     Running   0          4m40s
[root@master ingress]# kubectl exec -it -n ingress-nginx nginx-ingress-controller-5954d475b6-72kz5 /bin/sh
/etc/nginx $ ls
fastcgi.conf            mime.types              scgi_params
fastcgi.conf.default    mime.types.default      scgi_params.default
fastcgi_params          modsecurity             template
fastcgi_params.default  modules                 uwsgi_params
geoip                   nginx.conf              uwsgi_params.default
koi-utf                 nginx.conf.default      win-utf
koi-win                 opentracing.json
lua                     owasp-modsecurity-crs

创建Ingress资源

[root@master ingress]# vim ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: bdqn-ingress
  namespace: bdqn-ns
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ingress.bdqn.com
    http:
      paths:
      - path: /
        backend:
          serviceName:  httpd-svc
          servicePort:  80
      - path: /tomcat
        backend:
          serviceName: tomcat-svc
          servicePort: 8080
[root@master ingress]# kubectl apply -f ingress.yaml

查看一下:

[root@master ingress]# kubectl get ingresses. -n bdqn-ns
NAME           HOSTS              ADDRESS         PORTS   AGE
bdqn-ingress   ingress.bdqn.com   10.97.160.233   80      52s
[root@master ingress]# kubectl describe -n bdqn-ns ingresses. bdqn-ingress
//出现这个就显示成功了
Rules:
  Host              Path  Backends
  ----              ----  --------
  ingress.bdqn.com  
                    /         httpd-svc:80 (10.244.1.12:80,10.244.2.15:80)
                    /tomcat   tomcat-svc:8080 (10.244.1.13:8080,10.244.2.16:8080)
[root@master ingress]# kubectl get pod -n ingress-nginx 
NAME                                        READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-5954d475b6-72kz5   1/1     Running   0          12m
[root@master ingress]# kubectl exec -it -n ingress-nginx nginx-ingress-controller-5954d475b6-72kz5 sh
/etc/nginx $ cat nginx.conf
		location ~* "^/" {
			
			set $namespace      "bdqn-ns";
			set $ingress_name   "bdqn-ingress";
			set $service_name   "httpd-svc";
			set $service_port   "80";
			set $location_path  "/";

查看pod所在node节点:

[root@master ingress]# kubectl get pod -n ingress-nginx -o wide
NAME                                        READY   STATUS    RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES
nginx-ingress-controller-5954d475b6-72kz5   1/1     Running   0          16m   192.168.2.30   node02   <none>           <none>

去windows主机内hosts添加域名解析:

将192.168.2.30 ingress.bdqn.com添加到C:\Windows\System32\drivers\etc\hosts

浏览器访问http://ingress.bdqn.com/

http://ingress.bdqn.com/tomcat

修改服务ingress配置 ingress配置详解_修改服务ingress配置_07

修改服务ingress配置 ingress配置详解_vim_08

[root@master ingress]# kubectl apply -f service-nodeport.yaml 
service/ingress-nginx configured

Service-NodePort:因为ingress-nginx-controller运行在了集群内的其中一个节点,为了保证即使这个
节点宕机,我们对应的域名任然能够正常访问服务,所以我们将ingress-nginx-controller也暴露为一个
图片转存中…(img-8dDjWoE3-1582969468502)]

[外链图片转存中…(img-0BhmvKhr-1582969468503)]

[root@master ingress]# kubectl apply -f service-nodeport.yaml 
service/ingress-nginx configured

Service-NodePort:因为ingress-nginx-controller运行在了集群内的其中一个节点,为了保证即使这个
节点宕机,我们对应的域名任然能够正常访问服务,所以我们将ingress-nginx-controller也暴露为一个
service资源。