前面配置了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

访问 http://hello.example.com/

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

访问http://blog.example.com

ingress配置访问wordpress完成


博主声明:本文的内容来源主要来自誉天教育晏威老师,由本人实验完成操作验证,需要的博友请联系誉天教育(http://www.yutianedu.com/),获得官方同意或者晏老师(https://www.cnblogs.com/breezey/)本人同意即可转载,谢谢!

007.kubernets的headless service配置和ingress的简单配置的更多相关文章

  1. 再谈zabbix 邮件通知配置(不用脚本,简单配置就可以了)

    备注: 安装过zabbix 的人,大家都应该了解,后者查询网上的资料邮件通知一般是编写一个脚本,即报警媒介类型,创建一个script类似的 然后编写脚本,进行发送,但是实际上,系统内置的邮件发送还是比 ...

  2. MySQL 5.1.63 单机配置多实例(简单配置)

    需求: 在一台服务器上通过源码编译安装一个版本为5.1.63版本MySQL数据库: 方案:将所有配置文件与数据等均存放在/home/zhaoshuangshuang下.在同一个MySQL中运行两个实例 ...

  3. Django安装与简单配置(1)

    目录 1. 环境准备 2. 开始安装 2.1 安装Django 2.2 安装 Mysql数据库 3. 开始配置 3.1 Django简单配置 3.1.1 创建一个工程(project)为devops: ...

  4. 小丁带你走进git世界一-git简单配置

    小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config  –global user.name BattleHeaer ...

  5. kubernetes的headless service介绍

    headless service是一个特殊的ClusterIP类service,这种service创建时不指定clusterIP(--cluster-ip=None),因为这点,kube-proxy不 ...

  6. statefulSet + headless service 学习记录 service :selector --> template :label

    1.statefulset.yaml apiVersion: apps/v1kind: StatefulSetmetadata:   name: webspec:    serviceName: &q ...

  7. Reporting Service服务SharePoint集成模式安装配置(9、PowerPivot for SharePoint 安装配置详细)

    PowerPivot for SharePoint 增加了对发布到 SharePoint 中的 PowerPivot 工作簿的协作和文档管理支持. PowerPivot for SharePoint ...

  8. Reporting Service服务SharePoint集成模式安装配置(3、4、安装sharepoint 2010必备组件及产品)

    Reporting Service服务SharePoint集成模式安装配置 第三步和第四部 第三步 安装sharepoint 2010必备组件 1.安装SharePoint2010必备组件,执行Pre ...

  9. Kubernetes Headless Service

    1. Headless Service headless service 需要将 spec.clusterIP 设置成 None. 因为没有ClusterIP,kube-proxy 并不处理此类服务, ...

随机推荐

  1. 软工案例分析之OJ

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 和我的团队开发一个真正的软件,一起提升开发与合作的能力 这 ...

  2. 【2w字干货】ArrayList与LinkedList的区别以及JDK11中的底层实现

    1 概述 本文主要讲述了ArrayList与LinkedList的相同以及不同之处,以及两者的底层实现(环境OpenJDK 11.0.10). 2 两者区别 在详细介绍两者的底层实现之前,先来简单看一 ...

  3. IDEA/JRebel实现内部/外部/远程Tomcat热部署Spring Boot

    1 概述 所谓热部署,对于Java应用程序来说,就是在运行时更新Java类文件.IDEA可以使用自带的Spring Boot热部署的方式进行本地/远程热部署,或者使用JRebel进行本地/远程热部署, ...

  4. 你已经用上 5G 网络了吗?

    随着各大手机厂商陆续推出 5G 手机,智能手机全面迎来 5G 浪潮.可能有人会发问:如此推崇 5G,5G 能为我们带来什么,我们的生活又会因此而改变多大呢? 什么是 5G? 简单地说,5G 就是第五代 ...

  5. 【DB宝50】Oracle异构平台迁移之完全可传输导出导入(Full Transportable Export & Import)

    目录 一.简介 1.1.使用场景 1.2.限制条件 二.完全可传输操作步骤 三.案例演示 3.1.环境 3.2.源库操作 3.2.1.将需要传输的用户表空间设置为RO状态 3.2.2.使用Data P ...

  6. 2-7 Java基础数据类型之字符型

    代码中输入如下部分: /* char的取值范围0-65535 */ public class DataType06 { public static void main(String[]args){ c ...

  7. 关于CSS3背景渐变色无效问题

    无效的css[linear-gradient]写法 .loginbox{ background-color: linear-gradient(#D0D0D0, #E0E0E0, white); wid ...

  8. Laravel打印sql日志

    直接打印 use Log; use DB; DB::connection()->enableQueryLog(); Log::info(DB::getQueryLog()); //print_r ...

  9. LA3403天平难题(4个DFS)

    题意:      给出房间的宽度r和每个吊坠的重量wi,设计一个尽量宽但宽度不能超过房间宽度的天平,挂着所有挂坠,每个天平的一段要么挂这一个吊坠,要么挂着另一个天平,每个天平的总长度是1,细节我给出题 ...

  10. DVWA之CSRF(跨站请求伪造攻击)

    目录 Low Middle High Impossible Low 源代码: <?php if( isset( $_GET[ 'Change' ] ) ) { // Get input $pas ...