In order to facilitate exposing the services in the cluster to the outside of the cluster, you need to use Ingress. Next, use Helm to deploy Nginx Ingress to Kubernetes. Nginx Ingress Controller is deployed on the edge nodes of Kubernetes.
Here, use master
as the edge node, and label it with label
[[emailprotected] /]# kubectl label node master node -role.kubernetes.io/edge=
node/master labeled
[[emailprotected] /]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready edge,master 4d3h v1.15.1
slaver1 Ready4d2h v1.15.1
slaver2 Ready4d2h v1.15.1
installation
Install using yaml
configuration file
The value file ingress-nginx.yaml of stable/nginx-ingress chart is as follows:
controller:
replicaCount: 1
hostNetwork: true
nodeSelector:
node-role.kubernetes.io/edge:''
affinity:
podAntiAffinity :
requiredDuringSchedulingIgnoredDuringExecution:
-labelSelector:
matchExpressions:
-key: app
operator: In
values:
-nginx-ingress< br /> -key: component
operator: In
values:
-controller
topologyKey: kubernetes.io/hostname
tolerations:
-key: node-role .kubernetes.io/master
operator: Exists
effect: NoSchedule
-key: node-role.kubernetes.io/master
operator: Exists
effect: PreferNoSchedule
defaultBackend:
nodeSelector:
node-role.kubernetes.io/edge:''
tolerations:
-key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
-key: node-role.kubernetes.io/master
operator: Exists
effect: PreferNoSchedule
The full version of nginx-ingress
The replicaCount of the nginx ingress controller is 1, and it will be scheduled on the edge node node1. The externalIPs of the nginx ingress controller service are not specified here, but the host network is set by hostNetwork: true
to set the nginx ingress controller to use the host network.
helm repo update
helm install stable/nginx-ingress -n nginx-ingress --namespace ingress-nginx -f ingress-nginx.yaml
Specific information:
[[emailprotected] /]# helm install stable/nginx-ingress -n nginx-ingress --namespace ingress-nginx -f ingress-nginx.yaml
NAME: nginx -ingress
LAST DEPLOYED: Tue Jul 30 14:39:58 2019
NAMESPACE: ingress-nginx
STATUS: DEPLOYED
RESOURCES:
== > v1/ConfigMap
NAME DATA AGE
nginx-ingress-controller 1
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-657658b9b-sp9fx 0/1 ContainerCreating 0
nginx-ingress-default-backend-f8b68765c-kfks5 0/1 ContainerCreating 0
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-controller LoadBalancer 10.109.165.21080:32371/TCP,443:32057/TCP
nginx-ingress-default-backend ClusterIP 10.101.156.15380/TCP < invalid>
==> v1beta1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-ingress-controller 0/1 1 0
nginx-ingress-default-backend 0/1 1 0
==> v1beta1/PodDisruptionBudget
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
nginx-ingress-controller 1 N/A 0
nginx-ingress-default-backend 1 N/A 0
NOTES:
The nginx-ingress controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running'kubectl --namespace ingress-nginx get services -o wide -w nginx-ingress-controller'
An example Ingress that makes use of the controller:
apiVersion : extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: example
namespace: foo
spec:
rules:
-host: www.example.com
http:
paths:
-backend:
serviceName: exampleService
servicePort: 80
path: /
# This section is only required if TLS is to be enabled for the Ingress
tls:
-hosts:
-www.example.com
secretName: example-tls
If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
apiVersion: v1
kind: Secret
metadata:
name: example-tls< br /> namespace: foo
data:
tls.crt:
tls.key:
type: kubernetes.io/tls< /pre>Directly use command to install
helm install stable/nginx-ingress -n nginx-ingress --namespace ingress-nginx --set controller.hostNetwork= true, rbac.create=true --set controller.replicaCount=1Output:
[[emailprotected] /]# helm install stable/nginx-ingress> -n nginx -ingress> --namespace ingress-nginx> --set controller.hostNetwork=true,rbac.create=true> --set controller.replicaCount=1
Error: release nginx-ingress failed: Deployment in version "v1beta1 "cannot be handled as a Deployment: v1beta1.Deployment.Spec: v1beta1.DeploymentSpec.Template: v1.PodTemplateSpec.Spec: v1.PodSpec.HostNetwork: ReadBool: expect t or f, but found ", error found in #10 byte of ...|Network":"true,rba|..., bigger context ...|s":{}}],"dnsPolicy":"ClusterFirst","hostNetwork":"true, rbac.create=true ","serviceAccountName":"def|...The installation is abnormal. I did not set rbac when installing the helm here. Just remove and reinstall it.
[[emailprotected] /]# helm install stable/nginx-ingress> -n nginx- ingress> --namespace ingress-nginx> --set controller.hostNetwork=true,controller.replicaCount=1
NAME: nginx-ingress
LAST DEPLOYED: Tue Jul 30 15:19:59 2019
NAMESPACE: ingress-nginx
STATUS: DEPLOYED
RESOURCES:
==> v1/ConfigMap
NAME DATA AGE
nginx-ingress-controller 1
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-67db56c89f-2hkxq 0/1 ContainerCreating 0
nginx-ingress-default-backend-878d64884-q4fmt 0/1 ContainerCreating 0
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress-controller LoadBalancer 10.108.107.19980:31412/TCP,443:31392/TCP
nginx-ingress-default-backend ClusterIP 10.107.244.5980/TCP
== > v1beta1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-ingress-controller 0/1 1 0
nginx-ingress-default-backend 0/1 1 0
==> v1beta1/PodDisruptionBudget
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
nginx-ingress-controller 1 N/A 0
nginx-ingress-default-backend 1 N/A 0
NOTES:
The nginx-ingress controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running'kubectl --namespace ingress-nginx get services -o wide -w nginx-ingress-controller'
An example Ingress that makes use of the controller:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: example
namespace: foo
spec:
rules:
-host: www.example.com
http:
paths:
-backend:
serviceName: exampleService
servicePort: 80
path: /< br /> # This section is only required if TLS is to be enabled for the Ingress
tls:
-hosts:
-www.example.com
secretName: example-tls
If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
apiVersion: v1
kind: Secret
metadata:
name: example-tls
namespace: foo
data:
tls.crt:
tls.key:
type: kubernetes.io/tlsdelete nginx-ingress
Delete
nginx-ingress
[[emailprotected] /]# helm delete nginx-ingress
release "nginx-ingress" deleted
[ [email protected] /]# helm ls --all nginx-ingress
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
nginx-ingress 1 Tue Jul 30 14:31:01 2019 DELETED nginx-ingress-0.9 .5 0.10.2 ingress-nginx
[[emailprotected] /]# helm delete --purge nginx-ingress
release "nginx-ingress" deleted
[[emailprotected] /] # helm ls --all nginx-ingressUse the
--purge
parameter to completely delete the release without leaving a record, otherwise the release with the same name cannot be used in the next deployment.View successful installation
View pods:
[[emailprotected] /]# kubectl get pod -n ingress-nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-ingress-controller-657658b9b-sp9fx 0/1 CrashLoopBackOff 2 61s 18.16.202.163 master
nginx-ingress-default-backend-f8b68765c-kfks5 1/1 Running 0 61s 10.244.0.2 masterView services:
[[emailprotected] /]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
broken-gorilla-nginx-ingress-controller LoadBalancer 10.111.2.4080:31105 /TCP,443:30258/TCP 9m38s app=nginx-ingress,component=controller,release=broken-gorilla
broken-gorill a-nginx-ingress-default-backend ClusterIP 10.103.239.11780/TCP 9m38s app=nginx-ingress,component=default-backend,release=broken-gorilla
kubernetes ClusterIP 10.96.0.1443 /TCP 4d4h helm view:
[[emailprotected] /]# helm ls --all nginx-ingress
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
nginx-ingress 1 Tue Jul 30 14:39:58 2019 DEPLOYED nginx-ingress-0.9.5 0.10.2 ingress-nginxreference:
Use kubeadm to install Kubernetes 1.15
Use Helm to install Nginx ingress
Use Helm to quickly deploy Ingress