前面配置了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. Dynamics CRM使用Web Api时如果参数里面包含"&"的时候的处理方法

    当我们使用Dynamics CRM的Api的时候如果遇到查询字段的参数里面有&符号的话会影响Api的取值直接报错.原因是因为&符号在Url上面是一个关键字,这个关键字可以截断Url表示 ...

  2. python进阶(3)--条件判断、用户输入

    文档目录: 一.if语句二.检索条件三.用户输入input四.while+inoput(),让用户选择何时退出五.break与continue六.while循环处理字典和列表 ------------ ...

  3. leetcode 刷题(数组篇)26题 删除有序数组中的重复值 (双指针)

    题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额 ...

  4. 如何自己设计一个类似dubbo的rpc框架?

    (1)上来你的服务就得去注册中心注册吧,你是不是得有个注册中心,保留各个服务的信息,可以用zookeeper来做,对吧 (2)然后你的消费者需要去注册中心拿对应的服务信息吧,对吧,而且每个服务可能会存 ...

  5. HACK TEH BOX - Under Construction(JWT密钥混淆 + SQL注入)

    HACK TEH BOX - Under Construction(JWT密钥混淆 + SQL注入) 目录 1. JWT密钥混淆 2. 环境 3. Challenge 4. Walkthrough 1 ...

  6. 拓扑排序详解(梅开二度之dfs版按字典序输出拓扑路径+dfs版输出全部拓扑路径

    什么是拓扑排序? 先穿袜子再穿鞋,先当孙子再当爷.这就是拓扑排序! 拓扑排序说白了其实不太算是一种排序算法,但又像是一种排序(我是不是说了个废话qwq) 他其实是一个有向无环图(DAG, Direct ...

  7. EhCache缓存使用教程

    文章发表在我的博客上:https://blog.ysboke.cn/archives/124.html 什么是ehcache 纯Java的进程内缓存,直接在JVM虚拟机中缓存,速度非常快.缓存有两级, ...

  8. 缓冲区溢出分析第09课:MS06-040漏洞研究——深入挖掘

    前言 经过前两次的分析,我们已经对Netapi32.dll文件中所包含的漏洞成功地实现了利用.在系统未打补丁之前,这确实是一个非常严重的漏洞,那么打了补丁之后,这个动态链接库是不是就安全了呢?答案是否 ...

  9. LA3403 天平难题

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

  10. Linux文件共享服务之Samba

    目录 Samba Samba的配置 Samba Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ...