涛子 - 简单就是美

成单纯魁增,永继振国兴,克复宗清政,广开家必升

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

https://kubernetes.github.io/ingress-nginx/deploy/baremetal/
https://docs.k0sproject.io/v1.22.2+k0s.1/examples/nginx-ingress/

一. 部署

# 使用 baremetal

curl -k https://raw.fastgit.org/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml  -o deploy.yaml

sed -e 's|image: k8s.gcr.io|image: 192.168.100.198:5000|g' -i /tmp/deploy.yaml 

kubectl apply -f /tmp/deploy.yaml 

# kubectl get pods -n ingress-nginx -o wide
NAME                                        READY   STATUS      RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES
ingress-nginx-admission-create--1-hdssd     0/1     Completed   0          32s   10.240.2.161   vm-197   <none>           <none>
ingress-nginx-admission-patch--1-qlbt5      0/1     Completed   1          32s   10.240.2.162   vm-197   <none>           <none>
ingress-nginx-controller-7c9466769f-wwlpk   1/1     Running     0          33s   10.240.2.163   vm-197   <none>           <none>

# kubectl edit service ingress-nginx-controller -n ingress-nginx
type: NodePort -> type: LoadBalancer

# kubectl get services -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.96.11.180    192.168.100.161   80:31888/TCP,443:31071/TCP   3m49s
ingress-nginx-controller-admission   ClusterIP      10.101.45.192   <none>            443/TCP                      3m49s

二. 基于名称的负载均衡
1. 查看service

# kubectl get service -n kube-demo -o wide
NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE     SELECTOR
nginx   ClusterIP   10.97.122.87   <none>        80/TCP    7m13s   app=nginx

# kubectl describe service nginx -n kube-demo
Name:              nginx
Namespace:         kube-demo
Labels:            app=nginx
Annotations:       <none>
Selector:          app=nginx
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.97.122.87
IPs:               10.97.122.87
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.240.2.143:80,10.240.2.144:80,10.240.36.12:80
Session Affinity:  None
Events:            <none>

2. 建立ingress

服务名: name: nginx

cat > /tmp/ingress.yaml << EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  namespace: kube-demo
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: web.example.com
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: nginx
            port:
              number: 80
EOF

# kubectl apply -f /tmp/ingress.yaml 
ingress.networking.k8s.io/ingress created

# kubectl get ingress -A
NAMESPACE         NAME      CLASS    HOSTS             ADDRESS   PORTS   AGE
kube-demo   ingress   <none>   web.example.com             80      13s

# kubectl describe ingress -n kube-demo
Name:             ingress
Namespace:        kube-demo
Address:          
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host             Path  Backends
  ----             ----  --------
  web.example.com  
                   /   web-nginx:80 (10.240.2.151:80,10.240.36.4:80,10.240.36.5:80)
Annotations:       kubernetes.io/ingress.class: nginx
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  Sync    33s   nginx-ingress-controller  Scheduled for sync

3. 测试

# curl -I -k https://192.168.100.161 -H 'Host: web.example.com'
HTTP/1.1 200 OK
Date: Thu, 11 Nov 2021 06:29:50 GMT
Content-Type: text/html
Content-Length: 615
Connection: keep-alive
Last-Modified: Tue, 07 Sep 2021 15:50:58 GMT
ETag: "61378a62-267"
Accept-Ranges: bytes
Strict-Transport-Security: max-age=15724800; includeSubDomains

# curl -I http://192.168.100.161 -H 'Host: web.example.com'
HTTP/1.1 200 OK
Date: Thu, 11 Nov 2021 06:30:13 GMT
Content-Type: text/html
Content-Length: 615
Connection: keep-alive
Last-Modified: Tue, 07 Sep 2021 15:50:58 GMT
ETag: "61378a62-267"
Accept-Ranges: bytes

三. 基于URI的负载均衡
1. 建立service

cat > /tmp/service.yaml << EOF
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: service1
  namespace: deployment-demo
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: service2
  namespace: deployment-demo
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
EOF

2. 建立ingress

cat > /tmp/ingress-uri.yaml << EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-uri
spec:
  rules:
  - host: web2.example.com
    http:
      paths:
      - path: /foo
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80
      - path: /bar
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80
EOF

四、 TLS

posted on 2021-11-11 11:04  北京涛子  阅读(745)  评论(0编辑  收藏  举报