【问题标题】:Setup Kubernetes with LB & ingress使用 LB 和入口设置 Kubernetes
【发布时间】:2019-11-24 14:10:10
【问题描述】:

我正在尝试使用负载均衡器和入口配置单节点 kubernetes 集群,但我无法从我的外部 IP 访问它。此外,如果我尝试 curl/wget LB 的内部 IP,它也不起作用。我可以正确地 curl/wget 服务本身。谁能帮帮我?

配置

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  rules:
    - host: MY_DOMAIN
      http:
        paths:
        - path: /
          backend:
            serviceName: apple-service
            servicePort: 5678
---

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443

  externalIPs:
    - XX.XX.XX.XX


---

kind: Pod
apiVersion: v1
metadata:
  name: apple-app
  labels:
    app: apple
spec:
  containers:
    - name: apple-app
      image: hashicorp/http-echo
      args:
        - "-text=apple"

---

kind: Service
apiVersion: v1
metadata:
  name: apple-service
spec:
  selector:
    app: apple
  ports:
    - port: 5678 # Default port for image

kubectl 全部获取

NAME            READY   STATUS    RESTARTS   AGE
pod/apple-app   1/1     Running   0          12m

NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)                      AGE
service/apple-service   ClusterIP      10.108.8.152    <none>            5678/TCP                     12m
service/ingress-nginx   LoadBalancer   10.111.230.95   XX.XX.XX.XX  80:30338/TCP,443:31035/TCP   10m
service/kubernetes      ClusterIP      10.96.0.1       <none>            443/TCP                      6d

kubectl 获取入口

NAME           HOSTS   ADDRESS   PORTS   AGE
test-ingress   *                 80      6d

卷曲 10.107.97.101:5678

apple

卷曲 XX.XX.XX.XX:80(外部 ip)|localhost:80|MY_DOMAIN:80

curl: (7) Failed to connect to XX.XX.XX.XX port 80: Connection refused

安装

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

mkdir $HOME/.kube -p
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/
sudo chown $(id -u):$(id -g) $HOME/.kube/admin.conf
export KUBECONFIG=$HOME/.kube/admin.conf
echo "export KUBECONFIG=$HOME/.kube/admin.conf" | tee -a ~/.bashrc


# flanel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/k8s-manifests/kube-flannel-rbac.yml

# untained master to use as container host
kubectl taint nodes --all node-role.kubernetes.io/master-


# Install helm - for lets encrypt
sudo snap install helm --classic
PATH=$PATH:/snap/bin

# enable helm
helm init
helm install --name cert-manager -f cert-manager-values.yaml --namespace=default stable/cert-manager --set rbac.create=false
helm repo add jetstack https://charts.jetstack.io

# create letsencrypt 
kubectl create namespace cert-manager
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.8/deploy/manifests/00-crds.yaml

【问题讨论】:

  • externalIP 来自哪里?您是否手动创建了外部LoadBalancer
  • 外部IP是我服务器的公网IP
  • 可以尝试curl &lt;ExternalIP&gt;:30338,让我们知道这是否有效?如果您在云中运行,请记住允许流量到防火墙上的该端口。

标签: kubernetes kubernetes-ingress


【解决方案1】:

嗨@Fabi,您在测试入口规范中的服务名称应该是

服务名称:苹果服务

同时删除

externalTrafficPolicy:本地

来自您的 ingress-nginx 服务规范。

将您的入口规范编辑为:

apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: test-ingress spec: rules: - host: * http: paths: - path: /* backend: serviceName: apple-service servicePort: 5678

【讨论】:

  • 感谢您的回答。我更改了规格,但它仍然是相同的行为
  • 你能检查一下安全组吗
  • 我该怎么做?
  • 这个k8s集群是运行在云端还是onprem?
  • 我在 ubuntu 18.04 LTS 服务器上本地安装了它
猜你喜欢
  • 1970-01-01
  • 2019-11-20
  • 2018-10-07
  • 2021-02-03
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
相关资源
最近更新 更多