前面配置了servcie的nodepoint和clusterIP附在均衡
一 headless service配置
1.1 默認下的DNS配置
[root@docker-server1 deployment]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d18h mysql-svc ClusterIP 10.96.240.104 <none> 3306/TCP 2d7h wordpress NodePort 10.96.72.115 <none> 80:32080/TCP 2d7h
headless service也屬於clusterIP模式,不過設置為none
[root@docker-server1 deployment]# cd ../svcs/
[root@docker-server1 svcs]# vi nginx-svc.yaml
apiVersion: v1 kind: Service metadata: name: nginx-svc spec: selector: name: hello-deployment type: ClusterIP ports: - port: 80 targetPort: 80
[root@docker-server1 svcs]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE hello-deployment 3/3 3 3 6m12s mysql 1/1 1 1 2d7h wordpress 1/1 1 1 2d7h
[root@docker-server1 svcs]# kubectl get deployment hello-deployment -o yaml
apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"hello-deployment","namespace":"default"},"spec":{"replicas":3,"selector":{"matchLabels":{"name":"hello-deployment"}},"strategy":{"rollingUpdate":{"maxSurge":"10%","maxUnavailable":0},"type":"RollingUpdate"},"template":{"metadata":{"labels":{"name":"hello-deployment"}},"spec":{"containers":[{"image":"nginx:1.14","name":"webserver","ports":[{"containerPort":80}]}]}}}} creationTimestamp: "2020-01-12T13:01:40Z" generation: 1 name: hello-deployment namespace: default resourceVersion: "113947" selfLink: /apis/apps/v1/namespaces/default/deployments/hello-deployment uid: a65ecd15-4e40-4596-8bf1-414eb877bc98 spec: progressDeadlineSeconds: 600 replicas: 3 revisionHistoryLimit: 10 selector: matchLabels: name: hello-deployment strategy: rollingUpdate: maxSurge: 10% maxUnavailable: 0 type: RollingUpdate template: metadata: creationTimestamp: null labels: name: hello-deployment spec: containers: - image: nginx:1.14 imagePullPolicy: IfNotPresent name: webserver ports: - containerPort: 80 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: availableReplicas: 3 conditions: - lastTransitionTime: "2020-01-12T13:01:42Z" lastUpdateTime: "2020-01-12T13:01:42Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available - lastTransitionTime: "2020-01-12T13:01:40Z" lastUpdateTime: "2020-01-12T13:01:42Z" message: ReplicaSet "hello-deployment-5fdb46d67c" has successfully progressed. reason: NewReplicaSetAvailable status: "True" type: Progressing observedGeneration: 1 readyReplicas: 3 replicas: 3 updatedReplicas: 3
[root@docker-server1 svcs]# kubectl get pods
NAME READY STATUS RESTARTS AGE goproxy 1/1 Running 1 2d10h hello-deployment-5fdb46d67c-dqnnh 1/1 Running 0 7m54s hello-deployment-5fdb46d67c-s68tf 1/1 Running 0 7m54s hello-deployment-5fdb46d67c-x5nwl 1/1 Running 0 7m54s init-demo 1/1 Running 1 2d9h mysql-5d4695cd5-x9j2z 1/1 Running 1 2d7h nginx 2/2 Running 8 2d13h nginx-volume 1/1 Running 1 2d10h wordpress-6cbb67575d-ztxxp 1/1 Running 1 2d7h
[root@docker-server1 svcs]# kubectl apply -f nginx-svc.yaml
[root@docker-server1 svcs]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d18h mysql-svc ClusterIP 10.96.240.104 <none> 3306/TCP 2d7h nginx-svc ClusterIP 10.96.235.140 <none> 80/TCP 5s wordpress NodePort 10.96.72.115 <none> 80:32080/TCP 2d7h
[root@docker-server1 svcs]# curl http://10.96.235.140
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
1.2 查看詳細信息
[root@docker-server1 ~]# kubectl describe svc nginx-svc
Name: nginx-svc Namespace: default Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"nginx-svc","namespace":"default"},"spec":{"ports":[{"port":80,"ta... Selector: name=hello-deployment Type: ClusterIP IP: 10.96.235.140 Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints: 10.244.1.24:80,10.244.1.25:80,10.244.2.15:80 Session Affinity: None Events: <none>
1.3 域的默認配置項
在/root/kubeadm-config.yaml 有這兩個配置項
dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: k8s.gcr.io kind: ClusterConfiguration kubernetesVersion: v1.17.0 networking: dnsDomain: cluster.local #默認的域名后綴 serviceSubnet: 10.96.0.0/12 podSubnet: 10.244.0.0/16
會配置兩個coredns服務
[root@docker-server1 svcs]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE coredns-6955765f44-8kxdg 1/1 Running 1 2d18h coredns-6955765f44-m66bw 1/1 Running 1 2d18h etcd-192.168.132.131 1/1 Running 1 2d9h kube-apiserver-192.168.132.131 1/1 Running 2 2d18h kube-controller-manager-192.168.132.131 1/1 Running 4 2d18h kube-flannel-ds-amd64-dbckr 1/1 Running 1 2d18h kube-flannel-ds-amd64-fg972 1/1 Running 1 2d18h kube-flannel-ds-amd64-m9lgq 1/1 Running 1 2d18h kube-proxy-7xgt9 1/1 Running 1 2d18h kube-proxy-k8kb7 1/1 Running 1 2d18h kube-proxy-q867d 1/1 Running 1 2d18h kube-scheduler-192.168.132.131 1/1 Running 4 2d18h
[root@docker-server1 svcs]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 2d18h
1.4 進入容器查看dns
[root@docker-server1 svcs]# kubectl exec -it hello-deployment-5fdb46d67c-dqnnh /bin/bash
[root@docker-server1 svcs]# kubectl exec -it hello-deployment-5fdb46d67c-dqnnh /bin/bash root@hello-deployment-5fdb46d67c-dqnnh:/# cat /etc/resolv.conf nameserver 10.96.0.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5
coredns會默認創建一個域名解析
1.5 創建一個busybox pod測試
[root@docker-server1 ~]# cd /yamls/deployment/
[root@docker-server1 deployment]# vi busybox-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: busybox namespace: default spec: replicas: 1 selector: matchLabels: name: busybox strategy: type: RollingUpdate rollingUpdate: maxSurge: 10% maxUnavailable: 0 template: metadata: labels: name: busybox spec: containers: - name: busybox image: busybox command: - /bin/sh - -c - "sleep 3600"
[root@docker-server1 deployment]# kubectl apply -f busybox-deployment.yaml
deployment.apps/busybox created
[root@docker-server1 deployment]# kubectl get pods
NAME READY STATUS RESTARTS AGE busybox-546555c84-2psbb 1/1 Running 0 13s goproxy 1/1 Running 1 2d11h hello-deployment-5fdb46d67c-dqnnh 1/1 Running 0 24m hello-deployment-5fdb46d67c-s68tf 1/1 Running 0 24m hello-deployment-5fdb46d67c-x5nwl 1/1 Running 0 24m init-demo 1/1 Running 1 2d10h mysql-5d4695cd5-x9j2z 1/1 Running 1 2d7h nginx 2/2 Running 8 2d13h nginx-volume 1/1 Running 1 2d10h wordpress-6cbb67575d-ztxxp 1/1 Running 1 2d7h
[root@docker-server1 deployment]# kubectl exec -it busybox-546555c84-2psbb /bin/sh
/ # cat /etc/resolv.conf
nameserver 10.96.0.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5
/ # nslookup nginx-svc.default.svc.cluster.local
Server: 10.96.0.10 Address: 10.96.0.10:53 Name: nginx-svc.default.svc.cluster.local Address: 10.96.235.140
/ # ping nginx-svc.default.svc.cluster.local
PING nginx-svc.default.svc.cluster.local (10.96.235.140): 56 data bytes
[root@docker-server1 deployment]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d19h mysql-svc ClusterIP 10.96.240.104 <none> 3306/TCP 2d7h nginx-svc ClusterIP 10.96.235.140 <none> 80/TCP 22m wordpress NodePort 10.96.72.115 <none> 80:32080/TCP 2d7h
1.6 Headles service設置
Headles service不適用clusterip,他直接解析到關聯的POD
[root@docker-server1 svcs]# kubectl delete -f nginx-svc.yaml
[root@docker-server1 svcs]# vi nginx-svc.yaml
apiVersion: v1 kind: Service metadata: name: nginx-svc spec: selector: name: hello-deployment type: ClusterIP clusterIP: None ports: - port: 80 targetPort: 80
[root@docker-server1 svcs]# kubectl apply -f nginx-svc.yaml
[root@docker-server1 svcs]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d19h mysql-svc ClusterIP 10.96.240.104 <none> 3306/TCP 2d8h nginx-svc ClusterIP None <none> 80/TCP 10s wordpress NodePort 10.96.72.115 <none> 80:32080/TCP 2d7h
[root@docker-server1 deployment]# kubectl exec -it busybox-546555c84-2psbb /bin/sh
/ # ping nginx-svc.default.svc.cluster.local
PING nginx-svc.default.svc.cluster.local (10.244.1.24): 56 data bytes PING nginx-svc.default.svc.cluster.local (10.244.1.25): 56 data bytes PING nginx-svc.default.svc.cluster.local (10.244.2.15): 56 data bytes
輪詢解析到pod中
[root@docker-server1 svcs]# kubectl get pods -o wide |grep hello
hello-deployment-5fdb46d67c-dqnnh 1/1 Running 0 45m 10.244.1.25 192.168.132.132 <none> <none> hello-deployment-5fdb46d67c-s68tf 1/1 Running 0 45m 10.244.2.15 192.168.132.133 <none> <none> hello-deployment-5fdb46d67c-x5nwl 1/1 Running 0 45m 10.244.1.24 192.168.132.132 <none> <none>
1.7 缺點
當外部訪問使用映射的方式進行暴露端口進行訪問時,業務比較多時,暴露大量的端口映射,同時效率不高
[root@docker-server1 svcs]# netstat -ntlp
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 967/kubelet tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 8386/kube-proxy tcp 0 0 192.168.132.131:2379 0.0.0.0:* LISTEN 4581/etcd tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 4581/etcd tcp 0 0 192.168.132.131:2380 0.0.0.0:* LISTEN 4581/etcd tcp 0 0 127.0.0.1:2381 0.0.0.0:* LISTEN 4581/etcd tcp 0 0 127.0.0.1:10257 0.0.0.0:* LISTEN 4467/kube-controlle tcp 0 0 127.0.0.1:40081 0.0.0.0:* LISTEN 967/kubelet tcp 0 0 127.0.0.1:10259 0.0.0.0:* LISTEN 4509/kube-scheduler tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1228/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1602/master tcp6 0 0 :::32443 :::* LISTEN 8386/kube-proxy tcp6 0 0 :::10250 :::* LISTEN 967/kubelet tcp6 0 0 :::10251 :::* LISTEN 4509/kube-scheduler tcp6 0 0 :::6443 :::* LISTEN 4493/kube-apiserver tcp6 0 0 :::10252 :::* LISTEN 4467/kube-controlle tcp6 0 0 :::32080 :::* LISTEN 8386/kube-proxy tcp6 0 0 :::10256 :::* LISTEN 8386/kube-proxy tcp6 0 0 :::22 :::* LISTEN 1228/sshd tcp6 0 0 ::1:25 :::* LISTEN 1602/master
二 ingress的配置使用
2.1 介紹
使用ingress暴露端口
[root@docker-server1 svcs]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE busybox 1/1 1 1 34m hello-deployment 3/3 3 3 58m mysql 1/1 1 1 2d8h wordpress 1/1 2 2 2d8h
[root@docker-server1 svcs]# kubectl edit deploy wordpress
[root@docker-server1 svcs]# kubectl get pods
NAME READY STATUS RESTARTS AGE busybox-546555c84-2psbb 1/1 Running 0 34m goproxy 1/1 Running 1 2d11h hello-deployment-5fdb46d67c-dqnnh 1/1 Running 0 58m hello-deployment-5fdb46d67c-s68tf 1/1 Running 0 58m hello-deployment-5fdb46d67c-x5nwl 1/1 Running 0 58m init-demo 1/1 Running 1 2d10h mysql-5d4695cd5-x9j2z 1/1 Running 1 2d8h nginx 2/2 Running 9 2d13h nginx-volume 1/1 Running 1 2d11h wordpress-6cbb67575d-bxdsk 1/1 Running 0 10s wordpress-6cbb67575d-ztxxp 1/1 Running 1 2d8h
[root@docker-server1 svcs]# kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE busybox 1/1 1 1 34m hello-deployment 3/3 3 3 58m mysql 1/1 1 1 2d8h wordpress 2/2 2 2 2d8h
使用ingress暴露端口
Kubernetes暴露服務的方式目前有三種:
- LoadBlancer Service
- NodePort Service
- Ingress
雖然通過NodePort Service和LoadBlancer Service可以將集群內服務對外暴露。但事實上,各自又存在各自的問題:
-
LoadBalancer Service 通常用於與公有雲廠商對接,當然也可以自行實現其接口以完成與企業自建的負載均衡器對接。事實上LoadBanlacer Service的工作機制就是調用外部的負載均衡器以實現服務暴露,這依托於外部的負載均衡器。
-
NodePort Service 它的實現機制其實就是在每個node節點上都開啟一個端口,並通過iptables的dnat方式將這個宿主機端口映射至集群內部的service ip上。nodeport的問題是,當集群當中的服務越來越多的時候,在每個node上開啟的端口也越來越多,最終我們要維護大量的端口映射關系,這使得業務管理工作變得非常復雜。
2.2 Ingress架構及原理
針對上述nodeport暴露服務的問題,其實可以有一個解決辦法,即使用一個nginx/haproxy這樣的負載均衡器,只監聽在一個端口上,比如80或443,然后按照域名往后端轉發。將這樣的負載均衡器以pod的方式運行在集群中,並通過hostNetwork或者nodeport的方式只暴露負載均衡器監聽的端口即可。
這里其實有一個問題,就是nginx/haproxy怎么知道什么域名應該轉發至什么后端? 后端應用的pod如果發生變化,nginx/haproxy又應該如何感知到,並同步更新自己的配置文件然后重載配置?
而這就是ingress的作用。官方的ingress由三部分組成:
- Ingress類型的資源:其實就是個規則文件,其定義流量的轉發規則
- Ingress Controller: 通過與kubernetes api交互,動態的去感知集群中ingress規則變化,然后讀取它,再按照自己的模板生成一段nginx配置,再寫到nginx pod里,最后reload一下nginx
- Nginx:真正負責流量轉發的負載均衡器
事實上,kubernetes已經將ingress Controller和nginx結合到一起,統稱之ingress controller,所以在實際部署中,只需要部署ingress controller即可。
2.3 Nginx Ingress配置
官方托管代碼位置:https://github.com/kubernetes/ingress-nginx
[root@docker-server1 svcs]# cd ../
[root@docker-server1 yamls]# mkdir ingress
[root@docker-server1 yamls]# cd ingress
[root@docker-server1 ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
[root@docker-server1 ingress]# mv mandatory.yaml nginx-controller.yaml
添加一個hostNetwork,同時如果在國內,鏡像可能需要使用代理
[root@docker-server1 ingress]# kubectl apply -f nginx-controller.yaml
namespace/ingress-nginx created configmap/nginx-configuration created configmap/tcp-services created configmap/udp-services created serviceaccount/nginx-ingress-serviceaccount created clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created role.rbac.authorization.k8s.io/nginx-ingress-role created rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created deployment.apps/nginx-ingress-controller created limitrange/ingress-nginx created
[root@docker-server1 ingress]# kubectl get ns
NAME STATUS AGE default Active 2d20h ingress-nginx Active 35s kube-node-lease Active 2d20h kube-public Active 2d20h kube-system Active 2d20h kubernetes-dashboard Active 2d19h
[root@docker-server1 ingress]# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE nginx-ingress-controller-5c6985f9cc-wkngv 1/1 Running 0 65s
[root@docker-server1 ingress]# kubectl get pods -n ingress-nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-ingress-controller-5c6985f9cc-wkngv 1/1 Running 0 99s 192.168.132.132 192.168.132.132 <none> <none>
2.3 配置一個ingress的描述文件
[root@docker-server1 ingress]# vim nginx-ingress.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: hello-ingress spec: rules: - host: hello.example.com http: paths: - path: / backend: serviceName: nginx-svc servicePort: 80
[root@docker-server1 ingress]# kubectl apply -f nginx-ingress.yaml
[root@docker-server1 ingress]# kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE hello-ingress hello.example.com 80 6s
[root@docker-server1 ingress]# kubectl get ingress -o yaml
apiVersion: v1 items: - apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"hello-ingress","namespace":"default"},"spec":{"rules":[{"host":"hello.example.com","http":{"paths":[{"backend":{"serviceName":"nginx-svc","servicePort":80},"path":"/"}]}}]}} creationTimestamp: "2020-01-12T14:27:19Z" generation: 1 name: hello-ingress namespace: default resourceVersion: "126400" selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/hello-ingress uid: ea3585f5-dc5d-4df0-91c9-b8422bf4f27e spec: rules: - host: hello.example.com http: paths: - backend: serviceName: nginx-svc servicePort: 80 path: / status: loadBalancer: {} kind: List metadata: resourceVersion: "" selfLink: ""
[root@docker-server1 ingress]# kubectl describe ingress hello-ingress
Name: hello-ingress Namespace: default Address: Default backend: default-http-backend:80 (<none>) Rules: Host Path Backends ---- ---- -------- hello.example.com / nginx-svc:80 (10.244.1.24:80,10.244.1.25:80,10.244.2.15:80) Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"hello-ingress","namespace":"default"},"spec":{"rules":[{"host":"hello.example.com","http":{"paths":[{"backend":{"serviceName":"nginx-svc","servicePort":80},"path":"/"}]}}]}} Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal CREATE 67s nginx-ingress-controller Ingress default/hello-ingress
[root@docker-server1 ingress]# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE nginx-ingress-controller-5c6985f9cc-wkngv 1/1 Running 0 9m37s
2.4 進入容器查看
[root@docker-server1 ingress]# kubectl exec -it nginx-ingress-controller-5c6985f9cc-wkngv -n ingress-nginx /bin/bash
bash-5.0$ pwd /etc/nginx
bash-5.0$ cat nginx.conf
[root@docker-server1 ingress]# kubectl get pods -n ingress-nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-ingress-controller-5c6985f9cc-wkngv 1/1 Running 0 99s 192.168.132.132 192.168.132.132 <none> <none>
解析到192.168.132.132,修改本機hosts
2.5 訪問nginx
2.6 使用ingress訪問wordpress
[root@docker-server1 ingress]# vi wordpress-ingress.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: hello-world spec: rules: - host: blog.example.com http: paths: - path: / backend: serviceName: wordpress servicePort: 80
[root@docker-server1 ingress]# kubectl apply -f wordpress-ingress.yaml
[root@docker-server1 ingress]# kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE hello-ingress hello.example.com 80 23m hello-world blog.example.com 80 49s
寫入hosts文件解析並訪問blog.example.com
但是轉到32080
2.7 修復跳轉問題
使用ingress時,不使用端口映射
# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 kind: Service metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"wordpress","namespace":"default"},"spec":{"ports":[{"nodePort":32080,"port":80,"targetPort":80}],"selector":{"app":"wordpress"},"type":"NodePort"}} creationTimestamp: "2020-01-10T05:56:02Z" name: wordpress namespace: default resourceVersion: "101304" selfLink: /api/v1/namespaces/default/services/wordpress uid: 7d1c6de8-3d53-4235-9bd3-bb6e755aed2c spec: clusterIP: 10.96.72.115 externalTrafficPolicy: Cluster ports: - nodePort: 32080 port: 80 protocol: TCP targetPort: 80 selector: app: wordpress sessionAffinity: None type: NodePort status: loadBalancer: {}
修改為
[root@docker-server1 ingress]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d20h mysql-svc ClusterIP 10.96.240.104 <none> 3306/TCP 2d9h nginx-svc ClusterIP None <none> 80/TCP 75m wordpress ClusterIP 10.96.72.115 <none> 80/TCP 2d9h
[root@docker-server1 ingress]# curl -I -H "Host:blog.example.com" http://192.168.132.132
HTTP/1.1 301 Moved Permanently Server: nginx/1.17.7 Date: Sun, 12 Jan 2020 15:01:35 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/7.2.26 X-Redirect-By: WordPress Location: http://blog.example.com:32080/
依然發生轉發,是因為在wordpress初始化的時候,把訪問http://IP:32080寫進數據庫
重新安裝一次
[root@docker-server1 ingress]# kubectl delete -f /yamls/deployment/mysql-deployment.yaml
[root@docker-server1 ingress]# kubectl delete -f /yamls/deployment/wordpress-deployment.yaml
[root@docker-server1 ingress]# kubectl delete -f /yamls/svcs/wordpress-svc.yaml
[root@docker-server1 ingress]# vi /yamls/svcs/wordpress-svc.yaml
apiVersion: v1 kind: Service metadata: name: wordpress spec: selector: app: wordpress type: ClusterIP ports: - port: 80 targetPort: 80
[root@docker-server1 ingress]# kubectl delete -f /yamls/svcs/mysql-svc.yaml
[root@docker-server1 ingress]# kubectl apply -f /yamls/deployment/mysql-deployment.yaml
[root@docker-server1 ingress]# kubectl apply -f /yamls/svcs/mysql-svc.yaml
[root@docker-server1 ingress]# kubectl apply -f /yamls/deployment/wordpress-deployment.yaml
[root@docker-server1 ingress]# kubectl apply -f /yamls/svcs/wordpress-svc.yaml
[root@docker-server1 ingress]# kubectl get pods
NAME READY STATUS RESTARTS AGE busybox-546555c84-2psbb 1/1 Running 1 113m goproxy 1/1 Running 1 2d13h hello-deployment-5fdb46d67c-dqnnh 1/1 Running 0 136m hello-deployment-5fdb46d67c-s68tf 1/1 Running 0 136m hello-deployment-5fdb46d67c-x5nwl 1/1 Running 0 136m init-demo 1/1 Running 1 2d12h mysql-5d4695cd5-kzlms 1/1 Running 0 37s nginx 2/2 Running 10 2d15h nginx-volume 1/1 Running 1 2d12h wordpress-6cbb67575d-b9md5 1/1 Running 0 22s
[root@docker-server1 ingress]# curl -I -H "Host:blog.example.com" http://192.168.132.132
HTTP/1.1 302 Found Server: nginx/1.17.7 Date: Sun, 12 Jan 2020 15:19:08 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/7.2.26 Expires: Wed, 11 Jan 1984 05:00:00 GMT Cache-Control: no-cache, must-revalidate, max-age=0 X-Redirect-By: WordPress Location: http://blog.example.com/wp-admin/install.php
2.8 訪問wordpress
ingress配置訪問wordpress完成
博主聲明:本文的內容來源主要來自譽天教育晏威老師,由本人實驗完成操作驗證,需要的博友請聯系譽天教育(http://www.yutianedu.com/),獲得官方同意或者晏老師(https://www.cnblogs.com/breezey/)本人同意即可轉載,謝謝!