六. k8s--ingress学习笔记


k8s七层代理实现方案

  • trafik
  • envoy
  • nginx

ingress和service的区别与联系

部署安装ingress-nginx

部署ingress-Controller

mkdir nginx-ingress
cd nginx-ingress
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.25.1/deploy/static/mandatory.yaml
kubectl apply -f mandatory.yaml
kubectl get ns
kubectl get pod -n ingress-nginx

部署ingress-service(nodeport方式)

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
cat service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: 80
      nodePort: 30080     #指定了nodeport, 好处便于记忆, 坏处可能会端口冲突
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      nodePort: 30443     #指定了nodeport, 好处便于记忆, 坏处可能会端口冲突
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
kubectl apply -f service-nodeport.yaml
kubectl get pod -n ingress-nginx
kubectl get svc -n ingress-nginx

ingress实验

一. myapp

创建deployment以及对应的service

apiVersion: v1
kind: Service
metadata:
    name: myapp
    namespace: default
spec:
    selector:
        app: myapp
        release: canary
    ports:
    - name: http
      targetPort: 80
      port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
    name: myapp-deploy
    namespace: default
spec:
    replicas: 2
    selector:
      matchLabels:
        app: myapp
        release: canary
    template:
      metadata:
        labels:
          app: myapp
          release: canary
      spec:
        containers:
        - name: myapp
          image: ikubernetes/myapp:v1
          ports:
          - name: http
            containerPort: 80

创建对应service的ingress规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    name: ingress-myapp
    namespace: default
    annotations:
        kubernetes.io/ingress.class: "nginx"
spec:
    rules:
    - host: myapp.magedu.com
      http:
          paths:
          - path:
            backend:
                serviceName: myapp
                servicePort: 80

二. tomcat

拉取镜像

docker pull tomcat:8.5.32-jre8-alpine

创建deployment以及对应的service

apiVersion: v1
kind: Service
metadata:
    name: tomcat
    namespace: default
spec:
    selector:
        app: tomcat
        release: canary
    ports:
    - name: http
      targetPort: 8080
      port: 8080
    - name: ajp
      targetPort: 8009
      port: 8009
---
apiVersion: apps/v1
kind: Deployment
metadata:
    name: tomcat-deploy
    namespace: default
spec:
    replicas: 2
    selector:
      matchLabels:
        app: tomcat
        release: canary
    template:
      metadata:
        labels:
          app: tomcat
          release: canary
      spec:
        containers:
        - name: tomcat
          image: tomcat:8.5.32-jre8-alpine
          ports:
          - name: http
            containerPort: 8080
          - name: ajp
            containerPort: 8009

创建对应service的ingress规则

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

https://zhuanlan.zhihu.com/p/62623207

原文地址:https://www.cnblogs.com/peitianwang/p/11475786.html