Expose App
In this task, we will expose our application to internet users.
See also https://kubernetes.io/docs/concepts/services-networking/service/
Service
apiVersion: v1
kind: Service
metadata:
name: kitty-service
spec:
selector:
app: kitty
ports:
- protocol: TCP
port: 80
targetPort: 5000
Commands:
k create -f service.yaml
k get svc
# create a client
k run client --image=busybox -- sleep 360000
k exec -it client -- sh
# wget -O- http://kitty-service
NodePort Service
# service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: kitty-nodeport
spec:
type: NodePort
selector:
app: kitty
ports:
# By default and for convenience, the `targetPort` is set to the same value as the `port` field.
- port: 5000
targetPort: 5000
Commands
k create -f service-nodeport.yaml
$ k get svc kitty-nodeport # remember the nodeport 30960
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kitty-nodeport NodePort 10.245.44.36 <none> 5000:30960/TCP 2m17s
$ k get node -o wide # remember the external IP
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP
pool-8eal681ba-8agl9 Ready <none> 105m v1.20.7 10.104.0.3 165.22.240.39
# Now visit http://165.22.240.39:30960/
Ingress
See more https://kubernetes.io/docs/concepts/services-networking/ingress/
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kitty-ingress
spec:
defaultBackend:
service:
name: kitty-service
port:
number: 80 # update to another port
Commands
$ k create -f ingress.yaml
ingress.networking.k8s.io/kitty-ingress created
$ k get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
kitty-ingress <none> * 159.89.208.222 80 9s
# Now visit http://159.89.208.222/
Shortcut
k create service --help
# create a node port service
kubectl create service nodeport my-ns --tcp=80:80
# generate yaml and edit it
kubectl create service nodeport my-ns --tcp=80:80 --dry-run=client -o yaml > my-ns.yaml
# create from yaml finally
k create -f my-ns.yaml