总目录索引:k8s从入门到放弃系列

1、Ingress 介绍

    ingress是一个kubernetes资源,可让你为运行在kubernetes上的应用程序(由一个或多个[Services]表示)配置HTTP负载平衡器。这样的负载平衡器对于将这些应用程序交付给Kubernetes集群之外的客户端是必需的

ingress支持以下的路由:

    基于主机域名的路由

    基于服务路径的路由

 2、Ingress Controller

    Ingress  Controller是在群集中运行的应用程序,可根据Ingress资源配置HTTP负载平衡器。负载平衡器可以是群集中运行的软件负载平衡器,也可以是外部运行的硬件或云负载平衡器。

不同的负载平衡器需要不同的Ingress    Controller实现。

3、安装NGINX Ingress Controller

拉取yaml文件

git clone https://github.com/nginxinc/kubernetes-ingress/

cd kubernetes-ingress / deployments

git checkout v1.7.0

3.1 配置RBAC

kubectl apply -f common/ns-and-sa.yaml         #为Ingress控制器创建名称空间和服务帐户

kubectl apply -f rbac/rbac.yaml                #为服务帐户创建集群角色和集群角色绑定

3.2 创建公共资源

kubectl apply -f common/default-server-secret.yaml          #创建一个包含TLS证书和密钥的密钥

kubectl apply -f common/nginx-config.yaml                   #用于自定义NGINX配置的配置图

#为VirtualServer和VirtualServerRoute和TransportServer资源创建自定义资源定义

kubectl apply -f common/vs-definition.yaml                  

kubectl apply -f common/vsr-definition.yaml

kubectl apply -f common/ts-definition.yaml

3.3  使用Ingress Controller的TCP和UDP负载平衡功能,请创建以下附加资源:

    **功能状态**:TransportServer和GlobalConfiguration资源可作为预览功能使用:它适合进行实验和测试;但是,在生产环境中必须谨慎使用

kubectl apply -f common/gc-definition.yaml            #为GlobalConfiguration资源创建一个自定义资源定义

kubectl apply -f common/global-configuration.yaml     #创建一个GlobalConfiguration资源

3.4  使用Deploy部署Ingress Controller

kubectl apply -f deployment/nginx-ingress.yaml

kubectl get pod -n nginx-ingress           #查看是否运行成功

3.5  为Ingress Controller Pod创建服务

kubectl create -f service/nodeport.yaml

3.6  卸载相关应用

kubectl delete namespace nginx-ingress

kubectl delete clusterrole nginx-ingress

kubectl delete clusterrolebinding nginx-ingress

4、使用helm安装

helm repo add nginx-stable https://helm.nginx.com/stable

helm repo update

helm install nginx nginx-stable/nginx-ingress

Ingress_第1张图片

查看svc会发现状态时pending,需要修改type为NodePort

5、使用hostnetwork

kubectl edit deploy -n dev nginx-nginx-ingress

Ingress_第2张图片

修改完成后,重启成功在宿主机telnet   宿主机IP加ingress的nodeport,能通则说名成功了

Ingress_第3张图片

6、配置本地访问

6.1  部署一个deploy和svc

cat  test.yaml
apiVersion: v1
kind: Service
metadata:
  name: test-service
  labels:
    app: test
spec:
  ports:
  - name: http
    nodePort:
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: test
  sessionAffinity: None
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: test-tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: docker.io/kubeguide/tomcat-app:v1
        imagePullPolicy: IfNotPresent #Always
        ports:
        - containerPort: 8080

6.2  创建ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: hello.hello.com
    http:
      paths:
      - path: /
        backend:
          serviceName: test-service
          servicePort: 8080

查询创建的ingress

kubectl get ing

image-20200522111429336.png

因为 ingress 中设置了域名 hello.hello.com,所以需要在浏览器所在的机器上设置 dns。我的IP是192.168.10.11

确定ingress的对外端口

image-20200522111636797.png

在浏览器访问:hello.hello.com:30042,我这里是在宿主机curl,即可以看见tomcat的环境界面了

Ingress_第4张图片