标签 ingress 下的文章

基本概念:
  #kubernetes Service的类型(ServiceType)决定了Service如何对外提供服务,根据类型不同,服务可以只在Kubernetes cluster中可见,也可以暴露到Cluster外部。
      Service有三种类型,ClusterIP,NodePort和LoadBalancer。
          ClusterIP是Service的缺省类型,这种类型的服务会提供一个只能在Cluster内才能访问的虚拟IP,并且该ip不可ping
  #kubernetes配置服务外部可访问的方式有(说法并不严谨,只做范例理解)
      一、NodePort设置Service的类型为NodePort,可以在Cluster中的主机上通过一个指定端口暴露服务,发送到该主机端口的请求会被kubernetes路由到提供服务的Pod上。
          可以通过主机ip:端口的方式访问服务
      二、loadbalancer 需要云服务商提供
      三、ingress(ingress可以转发外部请求到k8s内部的服务,然后再转发回来)
        #此时配置nginx-ingress-controller为nodeport模式,外部访问ingress服务地址(nodeip+nodeport),当然如果有云服务支持,可以设置为loadbalancer;
        #其他可转发的服务设置为clusterip,ingress通过clusterip与其他服务通信
官方参考地址:
  https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
  https://kubernetes.github.io/ingress-nginx/user-guide/tls/
  https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
  https://github.com/helm/charts/blob/master/stable/nginx-ingress/values.yaml
  https://docs.cert-manager.io/en/latest/getting-started/install/kubernetes.html
Service:
  https://kubernetes.io/docs/concepts/services-networking/service/
  https://kubernetes.github.io/ingress-nginx/deploy/baremetal/(ingress对外几种方式的官方详解,本教程采用的nodeport形式)
本教程采用阿里云stable/charts
具体用法:helm inspect stable/nginx-ingress

#安装nginx-ingress with cert-manager TLS
一、安装helm
    #详见heml文件夹下的教程
二、部署NGINX Ingress
    #使用helm安装ingress(此处以nodeport方式开放外部访问nginx-ingress-controller)
        helm install stable/nginx-ingress --name nginx-ingress -f ./values.yaml --tls --debug
        helm install micro/nginx-ingress --name nginx-ingress -f ./1.8.1.yaml --tls --debug
        #获取安装的版本(看指定标签的pods,支持’=’, ‘==’, and ‘!=’操作符 kubectl get pods -l key=value)
            POD_NAME=$(kubectl get pods -l app=nginx-ingress -o jsonpath='{.items[0].metadata.name}')
            kubectl exec -it $POD_NAME -- /nginx-ingress-controller --version
        #查看svc
            kubectl get svc -o wide
        #此时非集群内主机(但网络可达kubernetes),访问vip或者pod所在nodeip的32080端口(对应nginx-ingress-controller服务80)或者32443(对应nginx-ingress-controller服务服务443)
            浏览器返回:default backend - 404
        #卸载命令:helm del --purge nginx-ingress --tls
三、Assign a DNS name
    The external IP that is allocated to the ingress-controller is the IP to which all incoming traffic should be routed. To enable this, add it to a DNS zone you control, for example as example.your-domain.com.
    This quickstart assumes you know how to assign a DNS entry to an IP address and will do so.
    #详见coredns教程
四、创建TLS
    #创建自签ca和key
      mkdir -pv /etc/kubernetes/pki/ingress && cd /etc/kubernetes/pki/ingress
      #注意下面的域名,其他服务启用ingress tls的会验证主机名称
      openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./ca.key.pem -out ./ca.cert.pem -subj "/C=CN/O=INGRESS/CN=*.kubernetes.ingress"
    #集群内创建密钥
      kubectl create secret tls ingress-cert-tls --key ./ca.key.pem --cert ./ca.cert.pem -n default
    #查看
       kubectl get secrets
          NAME                                                   TYPE                                  DATA   AGE
          default-token-7546r                                    kubernetes.io/service-account-token   3      12d
          ingress-tls-cert                                       kubernetes.io/tls                     2      9m54s
          kubernetes-dashboard                                   Opaque                                0      3h21m
          kubernetes-dashboard-token-dl66n                       kubernetes.io/service-account-token   3      3h21m
          letsencrypt-prod                                       Opaque                                1      26h
          nginx-ingress-token-4pzks                              kubernetes.io/service-account-token   3      27h
          prometheus-prometheus-alertmanager-token-26kzc         kubernetes.io/service-account-token   3      170m
          prometheus-prometheus-kube-state-metrics-token-f26k5   kubernetes.io/service-account-token   3      170m
          prometheus-prometheus-node-exporter-token-92d7g        kubernetes.io/service-account-token   3      170m
          prometheus-prometheus-server-token-wqlvq               kubernetes.io/service-account-token   3      170m
五、部署一个pod服务到nginx-ingress的范例
  #部署pod example01
     cat <<EOF > example01-ingress.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kuard
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: kuard
    spec:
      containers:
      - image: gcr.azk8s.cn/kuar-demo/kuard-amd64:1
        imagePullPolicy: Always
        name: kuard
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: kuard
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: kuard
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-kuard
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: kuard.kubernetes.ingress
    http:
      paths:
      - path: /
        backend:
          serviceName: kuard
          servicePort: 80
  tls:
  - secretName: ingress-cert-tls
    hosts:
    - kubernetes.ingress
EOF
      kubectl apply -f  example01-ingress.yaml
    #查看ingress状态
      kubectl get ingress
    #web访问http://kubernetes.ingress:32080 #需要配置外部的dns解析对应域名为vip或者nodeip
      会显示kuard的页面
    #web访问https://kubernetes.ingress:32443 #需要配置外部的dns解析对应域名为vip或者nodeip
      因为未配置合适的证书,所以会报证书风险,以及404错误
    #curl -kivL -H 'Host: kubernetes.ingress' 'http://192.168.10.240:32080'
    #curl -kivL -H 'Host: kubernetes.ingress' 'http://192.168.10.240:32443'
#升级
  helm upgrade nginx-ingress micro/nginx-ingress -f ./1.7.0.yaml --tls --debug
  
直接粘贴笔记,格式不太美观,教程原文件及yaml配置文件,可以直接百度云下载后浏览:https://pan.baidu.com/s/14KArQ7yWhqWJEgcVZrxE6Q 提取码:86mq