Kuberntes 之 Cilium 启用Cilium Ingress Controller【2024-03-01 测试成功】

部署MetaILB + 启用Cilium Ingress Controller

#
root@ubuntu-k8s-master01:~# cilium uninstall
🔥 Deleting pods in cilium-test namespace...
🔥 Deleting cilium-test namespace...

#
root@ubuntu-k8s-master01:~/software# cilium install \
        --set kubeProxyReplacement=strict \
        --set ipam.mode=kubernetes \
        --set routingMode=tunnel \
        --set tunnelProtocol=vxlan \
        --set ipam.operator.clusterPoolIPv4PodCIDRList=10.244.0.0/16 \
        --set ipam.Operator.ClusterPoolIPv4MaskSize=24 \
        --set ingressController.enabled=true \
        --set ingressController.loadbalancerMode=shared
ℹ️  Using Cilium version 1.15.0
🔮 Auto-detected cluster name: kubernetes
🔮 Auto-detected kube-proxy has not been installed
ℹ️  Cilium will fully replace all functionalities of kube-proxy

root@ubuntu-k8s-master01:~/software# kubectl get pods -n kube-system
NAME                                          READY   STATUS    RESTARTS      AGE
cilium-jvvdp                                  1/1     Running   0             57s
cilium-mnr4p                                  1/1     Running   0             57s
cilium-operator-7764cf64d6-zfw96              1/1     Running   0             57s
cilium-svx6j                                  1/1     Running   0             57s
coredns-774bbd8588-5qx92                      1/1     Running   0             19h
coredns-774bbd8588-ggfjp                      1/1     Running   0             19h
etcd-ubuntu-k8s-master01                      1/1     Running   0             19h
etcd-ubuntu-k8s-node01                        1/1     Running   0             19h
etcd-ubuntu-k8s-node02                        1/1     Running   0             19h
kube-apiserver-ubuntu-k8s-master01            1/1     Running   0             19h
kube-apiserver-ubuntu-k8s-node01              1/1     Running   0             19h
kube-apiserver-ubuntu-k8s-node02              1/1     Running   0             19h
kube-controller-manager-ubuntu-k8s-master01   1/1     Running   1 (19h ago)   19h
kube-controller-manager-ubuntu-k8s-node01     1/1     Running   0             19h
kube-controller-manager-ubuntu-k8s-node02     1/1     Running   0             19h
kube-scheduler-ubuntu-k8s-master01            1/1     Running   1 (19h ago)   19h
kube-scheduler-ubuntu-k8s-node01              1/1     Running   0             19h
kube-scheduler-ubuntu-k8s-node02              1/1     Running   0             19h

root@ubuntu-k8s-master01:~/software# cilium status
    /¯¯\
 /¯¯\__/¯¯\    Cilium:             OK
 \__/¯¯\__/    Operator:           OK
 /¯¯\__/¯¯\    Envoy DaemonSet:    disabled (using embedded mode)
 \__/¯¯\__/    Hubble Relay:       disabled
    \__/       ClusterMesh:        disabled

Deployment             cilium-operator    Desired: 1, Ready: 1/1, Available: 1/1
DaemonSet              cilium             Desired: 3, Ready: 3/3, Available: 3/3
Containers:            cilium             Running: 3
                       cilium-operator    Running: 1
Cluster Pods:          5/5 managed by Cilium
Helm chart version:    1.15.0
Image versions         cilium             quay.io/cilium/cilium:v1.15.0@sha256:9cfd6a0a3a964780e73a11159f93cc363e616f7d9783608f62af6cfdf3759619: 3
                       cilium-operator    quay.io/cilium/operator-generic:v1.15.0@sha256:e26ecd316e742e4c8aa1e302ba8b577c2d37d114583d6c4cdd2b638493546a79: 1
                  
root@ubuntu-k8s-master01:~/software# kubectl get svc -n kube-system
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
cilium-ingress   LoadBalancer   10.102.86.21    <pending>     80:30616/TCP,443:32436/TCP   108s
hubble-peer      ClusterIP      10.101.155.52   <none>        443/TCP                      108s
kube-dns         ClusterIP      10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP       19h

#部署MetaILB
#这里因为没有部署kube-proxy 所以不用修改kubectl edit cm kube-proxy -n kube-system 这一步
#192.168.40.51
root@ubuntu-k8s-master01:~/software# kubectl get svc -n kube-system
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
cilium-ingress   LoadBalancer   10.102.86.21    192.168.40.51   80:30616/TCP,443:32436/TCP   18m
hubble-peer      ClusterIP      10.101.155.52   <none>          443/TCP                      18m
kube-dns         ClusterIP      10.96.0.10      <none>          53/UDP,53/TCP,9153/TCP       20h

通过 Cilium Ingress Controller 开放 Hubble UI

root@ubuntu-k8s-master01:~/software# cilium hubble enable --ui
root@ubuntu-k8s-master01:~/software# kubectl get svc -n kube-system
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
cilium-ingress   LoadBalancer   10.102.86.21    192.168.40.51   80:30616/TCP,443:32436/TCP   23m
hubble-peer      ClusterIP      10.101.155.52   <none>          443/TCP                      23m
hubble-relay     ClusterIP      10.97.223.195   <none>          80/TCP                       9s
hubble-ui        ClusterIP      10.110.4.237    <none>          80/TCP                       9s
kube-dns         ClusterIP      10.96.0.10      <none>          53/UDP,53/TCP,9153/TCP       20h

root@ubuntu-k8s-master01:~/software#  kubectl create ingress hubble-ui --rule='hubble.sheca.com/*=hubble-ui:80' --class='cilium' -n kube-system --dry-run=client -o yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  creationTimestamp: null
  name: hubble-ui
  namespace: kube-system
spec:
  ingressClassName: cilium
  rules:
  - host: hubble.sheca.com
    http:
      paths:
      - backend:
          service:
            name: hubble-ui
            port:
              number: 80
        path: /
        pathType: Prefix
status:
  loadBalancer: {}

#此时的192.168.40.51 因为之前是shared模式 所以 Cilium的外部IP就是192.168.40.51
root@ubuntu-k8s-master01:~/software# kubectl create ingress hubble-ui --rule='hubble.sheca.com/*=hubble-ui:80' --class='cilium' -n kube-system
ingress.networking.k8s.io/hubble-ui created
root@ubuntu-k8s-master01:~/software# kubectl get ingress -n kube-system
NAME        CLASS    HOSTS              ADDRESS         PORTS   AGE
hubble-ui   cilium   hubble.sheca.com   192.168.40.51   80      25s

root@ubuntu-k8s-master01:~/software# kubectl describe ingress hubble-ui -n kube-system
Name:             hubble-ui
Labels:           <none>
Namespace:        kube-system
Address:          192.168.40.51
Ingress Class:    cilium
Default backend:  <default>
Rules:
  Host              Path  Backends
  ----              ----  --------
  hubble.sheca.com
                    /   hubble-ui:80 (10.244.1.106:8081)
Annotations:        <none>
Events:             <none>

#编辑 笔记本 /etc/hosts文件
192.168.40.51 hubble.sheca.com

通过Ingress 暴露服务-shared模式 共用一个External IP

root@ubuntu-k8s-master01:~/software# kubectl create deployment demoapp-cilium --image=ikubernetes/demoapp:v1.0 --replicas=3
deployment.apps/demoapp-cilium created

root@ubuntu-k8s-master01:~/software# kubectl get pods -o wide | grep cilium
demoapp-cilium-65c55ccffb-8lp84   1/1     Running   0          91s   10.244.1.115   ubuntu-k8s-node01   <none>           <none>
demoapp-cilium-65c55ccffb-j9zlb   1/1     Running   0          91s   10.244.2.105   ubuntu-k8s-node02   <none>           <none>
demoapp-cilium-65c55ccffb-rwq9j   1/1     Running   0          91s   10.244.2.191   ubuntu-k8s-node02   <none>           <none>

root@ubuntu-k8s-master01:~/software# kubectl create service clusterip demoapp-cilium --tcp=80:80
service/demoapp-cilium created

root@ubuntu-k8s-master01:~/software# kubectl  get svc
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
demoapp          ClusterIP   10.96.47.49     <none>        80/TCP    19h
demoapp-cilium   ClusterIP   10.105.188.29   <none>        80/TCP    2m5s
kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP   20h


root@ubuntu-k8s-master01:~/software# kubectl  get ep
NAME             ENDPOINTS                                                     AGE
demoapp          10.244.1.44:80,10.244.2.46:80,10.244.2.73:80                  19h
demoapp-cilium   10.244.1.115:80,10.244.2.105:80,10.244.2.191:80               3s
kubernetes       192.168.40.132:6443,192.168.40.133:6443,192.168.40.134:6443   20h

#创建Ingress
root@ubuntu-k8s-master01:~/software# kubectl create ingress demoapp-cilium-ingress --rule='demoapp-cilium.sheca.com/*=demoapp-cilium:80' --class='cilium'
ingress.networking.k8s.io/demoapp-cilium-ingress created
root@ubuntu-k8s-master01:~/software# kubectl get ingress
NAME                     CLASS    HOSTS                      ADDRESS         PORTS   AGE
demoapp-cilium-ingress   cilium   demoapp-cilium.sheca.com   192.168.40.51   80      6s

#配置Hosts
192.168.40.51 dzzz.sheca.com hubble.sheca.com demoapp-cilium.sheca.com

#访问浏览器
demoapp-cilium.sheca.com

通过Ingress 暴露服务-dedicated 模式 每个Service独用一个External IP

root@ubuntu-k8s-master01:~/software# kubectl get ingress
NAME                     CLASS    HOSTS                      ADDRESS         PORTS   AGE
demoapp-cilium-ingress   cilium   demoapp-cilium.sheca.com   192.168.40.51   80      3m56s
#保存之前的配置 进行修改为dedicated模式
root@ubuntu-k8s-master01:~/software# kubectl create ingress demoapp-cilium-ingress --rule='demoapp-cilium.sheca.com/*=demoapp-cilium:80' --class='cilium' --dry-run=client -o yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  creationTimestamp: null
  name: demoapp-cilium-ingress
spec:
  ingressClassName: cilium
  rules:
  - host: demoapp-cilium.sheca.com
    http:
      paths:
      - backend:
          service:
            name: demoapp-cilium
            port:
              number: 80
        path: /
        pathType: Prefix
status:
  loadBalancer: {}
root@ubuntu-k8s-master01:~/software# kubectl create ingress demoapp-cilium-ingress --rule='demoapp-cilium.sheca.com/*=demoapp-cilium:80' --class='cilium' --dry-run=client -o yaml > demoapp-cilium-ingress-shared.yaml


#192.168.40.52
root@ubuntu-k8s-master01:~/software# kubectl get ingress
NAME                     CLASS    HOSTS                      ADDRESS         PORTS   AGE
demoapp-cilium-ingress   cilium   demoapp-cilium.sheca.com   192.168.40.52   80      24m

#单独会建立一个cilium-ingress-demoapp-cilium-ingress 名字
root@ubuntu-k8s-master01:~/software# kubectl get svc
NAME                                    TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
cilium-ingress-demoapp-cilium-ingress   LoadBalancer   10.97.191.210   192.168.40.52   80:30900/TCP,443:32014/TCP   25m
demoapp                                 ClusterIP      10.96.47.49     <none>          80/TCP                       19h
demoapp-cilium                          ClusterIP      10.105.188.29   <none>          80/TCP                       36m
kubernetes                              ClusterIP      10.96.0.1       <none>          443/TCP                      21h

#配置hosts
192.168.40.52 demoapp-cilium.sheca.com

#访问
demoapp-cilium.sheca.com

 

 

posted @ 2024-03-01 09:48  しみずよしだ  阅读(98)  评论(1)    收藏  举报