总目录索引: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

查看svc会发现状态时pending,需要修改type为NodePort
5、使用hostnetwork
kubectl edit deploy -n dev nginx-nginx-ingress

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

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

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

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

来源:oschina
链接:https://my.oschina.net/u/4280983/blog/4287812